【发布时间】:2014-06-22 10:15:31
【问题描述】:
我有一个带有可变数量的模板参数的模板类。在这些情况下(我买不起 C++11),一个好的做法是创建一个我们称之为 none 的默认类,并将其设置为默认类,如下所示。
struct none {};
template<class T1=none, T2=none, T3=none>
class A{
template<class T>
double extract() { return none();}
template<>
double extract<T1>() { return m1_();}
template<>
double extract<T2>() { return m2_();}
template<>
double extract<T3> () { return m3_();}
T1 m1_;
T2 m2_;
T3 m3_;
};
在这个阶段,我不知道如何实现可以访问每个模板化参数的通用/模板化访问器函数。
所有的模板化参数都不同,所以我专门为每个模板化参数使用 A::extract()。
有没有更好的方法来做到这一点?我可以查看任何类型的标记吗?
【问题讨论】:
-
如果
T1和T2是同一个类型,那么这种访问方式就变得不明确了。 -
这将从is_same 中受益良多..
-
使用 boost::tuples boost.org/doc/libs/1_55_0/libs/tuple/doc/tuple_users_guide.html
-
这还能用吗?您不能将显式特化放在类范围内。
-
@n.m.我相信这只是伪代码。同样为通用案例调用 extract() 失败(返回值)
标签: c++ templates template-argument-deduction