선택적 템플릿 매개 변수는 어떻게 구현합니까?선택적 템플릿 매개 변수를 구현하는 방법은 무엇입니까?
클래스 MyStruct<T1,T2,T3>
을 갖고 싶습니다. 첫 번째 또는 처음 두 개의 매개 변수 만 사용할 수 있습니다. 이제 MyStruct<T1,T2,T3>
을 처리하는 함수는 사용되지 않는 템플릿 매개 변수를 사용하여 올바르게 처리해야합니다.
예 :
이제#include <iostream>
template<class T1, class T2, class T3>
struct MyStruct {
T1 t1; T2 t2; T3 t3;
MyStruct() {}
MyStruct(T1 const& t1_, T2 const& t2_, T3 const& t3_)
: t1(t1_), t2(t2_), t3(t3_) {}
};
template<class T1, class T2, class T3>
MyStruct<T1, T2, T3> myplus(MyStruct<T1, T2, T3> const& x,
MyStruct<T1, T2, T3> const& y) {
return MyStruct<T1, T2, T3>(x.t1 + y.t1, x.t2 + y.t2, x.t3 + y.t3);
}
int main() {
typedef MyStruct<int, double, std::string> Struct;
Struct x(2, 5.6, "bar");
Struct y(6, 4.1, "foo");
Struct result = myplus(x, y);
// (8, 9.7, "barfoo")
std::cout << result.t1 << "," << result.t2 << "," << result.t3;
}
나는 위의 main()
기능이 계속 작동하도록 코드를 변경하고 싶습니다,하지만 다음도 작동합니다 :
typedef MyStruct<std::string, int> Struct;
// result: ("barfoo", 5)
Struct result = myplus(Struct("bar", 2), Struct("foo", 3));
또는이 :
typedef MyStruct<int> Struct;
// result: (5)
Struct result = myplus(Struct(2), Struct(3));
boost::tuple
은 비슷한 트릭을 사용합니다.을 사용할 수 있습니다., boost::tuple<A,B>
, boost::tuple<A,B,C>
,하지만 어떻게하는지 모르겠습니다.
나는'Default()'를 반환하는'operator + (Default const & Default const &)'를 정의하면'plus()'함수가 작동 할 것이다. 좋은. – Frank