사과 비슷한 질문에 해결책이있는 경우 유사한 오류 출력/문제가있는 것을 찾을 수 없습니다.emplace_back에 완벽한 전달 템플릿 매개 변수 팩 - 컴파일 실패
이 코드 컴파일을 시도하고있다 :
#include <vector>
using namespace std;
template< typename value_type >
class obj
{
vector<value_type> m_v;
public:
template<class... vaList_t>
void _emplace_back(vaList_t&&... i_values)
{
m_v.emplace_back(forward<vaList_t>(i_values)...);
}
};
int main()
{
obj<int> thing;
thing._emplace_back(1,2,3,4);
return 0;
}
가 함께 컴파일에 실패 그러나 :
In file included from /usr/include/x86_64-linux-gnu/c++/4.9/bits/c++allocator.h:33:0,
from /usr/include/c++/4.9/bits/allocator.h:46,
from /usr/include/c++/4.9/vector:61,
from 1:
/usr/include/c++/4.9/ext/new_allocator.h: In instantiation of 'void __gnu_cxx::new_allocator<_Tp>::construct(_Up*, _Args&& ...) [with _Up = int; _Args = {int, int, int, int}; _Tp = int]':
/usr/include/c++/4.9/bits/alloc_traits.h:253:4: required from 'static std::_Require<typename std::allocator_traits<_Alloc>::__construct_helper<_Tp, _Args>::type> std::allocator_traits<_Alloc>::_S_construct(_Alloc&, _Tp*, _Args&& ...) [with _Tp = int; _Args = {int, int, int, int}; _Alloc = std::allocator<int>; std::_Require<typename std::allocator_traits<_Alloc>::__construct_helper<_Tp, _Args>::type> = void]'
/usr/include/c++/4.9/bits/alloc_traits.h:399:57: required from 'static decltype (_S_construct(__a, __p, (forward<_Args>)(std::allocator_traits::construct::__args)...)) std::allocator_traits<_Alloc>::construct(_Alloc&, _Tp*, _Args&& ...) [with _Tp = int; _Args = {int, int, int, int}; _Alloc = std::allocator<int>; decltype (_S_construct(__a, __p, (forward<_Args>)(std::allocator_traits::construct::__args)...)) = <type error>]'
/usr/include/c++/4.9/bits/vector.tcc:97:40: required from 'void std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {int, int, int, int}; _Tp = int; _Alloc = std::allocator<int>]'
13:3: required from 'void obj<value_type>::_emplace_back(vaList_t&& ...) [with vaList_t = {int, int, int, int}; value_type = int]'
20:30: required from here
/usr/include/c++/4.9/ext/new_allocator.h:120:4: error: new initializer expression list treated as compound expression [-fpermissive]
{ ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
질문 :
- 완벽 전달 템플릿이 올바른 구문입니다 매개 변수 팩? (무엇이 아닌 경우)
- 이 동작을 수행하는 올바른 방법은 무엇입니까?
감사합니다.
편집 불명확 함. 나는 형의 서명 emplace_back이라는 벡터 함수를 호출하는 것을 시도하고있다 :
template< class... Args > void emplace_back(Args&&... args);
을 추가 할 여러 요소를 포함하는 전달 완벽한, 템플릿 매개 변수 팩.
예 :
- "1,2,3,4"- 3 개의 다른 개체를 추가 -
- "참, 거짓, 거짓" emplace_back을 통해 벡터의 뒷면에 4 개의 다른 개체를 추가 emplace_back 통해 벡터의 후면
이 아마도 당신이'm_v.insert 의미 (m_v.end() {앞으로 (i_values를) ...});', 또는'(m_v.emplace_back (전달 (i_values)), ...); ' –
벡터에 4 개의 항목을 삽입 하시겠습니까? – kennytm
@PiotrSkotnicki ", ..."이 컴파일되지 않습니다. 인서트가 컴파일됩니다. 그러나 그것은 완벽하지 않습니다 매개 변수 팩을 전달? 삽입을위한 함수 인자는 반복자와 초기화리스트이므로 추가 오버 헤드가 발생합니까? – QuantumKarl