#include <iostream>
#include <vector>
template< class L, class R >
auto& vector_casted_push_back( std::vector< L >& owner,
const std::vector< R >& newcomers )
{
for( auto newcomer : newcomers )
owner.push_back( L( newcomer ) );
return owner;
}
using namespace std;
struct ASSM
{
int v;
template< class T >
ASSM( T rvalue ) : v( (int)rvalue ) {}
};
std::vector< double > BOC = { 0, 1, 2, 3 };
std::vector< long long > EOC = { 4, 5, 6, };
int main()
{
auto* coreBOC = new vector< ASSM >;
auto* coreEOC = new vector< ASSM >;
vector_casted_push_back( *coreBOC, BOC );
vector_casted_push_back( *coreEOC, EOC );
return 0;
}
물론 vector 전용이 아니게 일반화 할 수도 있음~
#define CONTAINER_T( type, element_type )
template< class, class > class type, class element_type
#define CONTAINER_D( name, element_type )
name< element_type, std::allocator< element_type > >
template< CONTAINER_T( L, LE ), CONTAINER_T( R, RE ) >
auto& casted_push_back( CONTAINER_D( L, LE )& owner,
const CONTAINER_D( R, RE )& newcomers )
{
for( auto newcomer : newcomers )
owner.push_back( LE( newcomer ) );
return owner;
}
int main()
{
auto* coreBOC = new vector< ASSM >;
auto* coreEOC = new vector< ASSM >;
casted_push_back( *coreBOC, BOC );
casted_push_back( *coreEOC, EOC );
return 0;
}
진짜빨리짜시넫ㄷ
어매 오늘은 이걸로 해야지;;;
근데 난 emplace_back 이 더 좋다능.
왜 참조 리턴을 해 줬는지 알겠엉?
casted_push_back( casted_push_back( *coreBOC, BOC ), EOC ); 이런 직렬 표현이 가능해짐.
왜 void가 아니고 참조리턴인가 생각하고 있었는데 리플이 달렸네여 ㄷㄷ 독심술하쉼;
직렬 표현이 지원되면 편하겠다 싶을때 걍 저렇게 넘겨주면 됨요~
체인리액션같네여
감사합니다
응 체이닝이지유~
#define 뒤에는 백슬래시 하나씩 붙여줘야 됨요. 다음줄까지 define 이니.
std::vector< double > BOC{ 0, 1, 2, 3 }; 이렇게 하라고~