【发布时间】:2016-12-19 13:39:41
【问题描述】:
(我不知道如何命名这个问题,也找不到类似的东西。抱歉,如果这是重复的)
如果我想从某个基模板类继承,我可以这样做:
template<typename A=int, typename B=char> class C {};
template<typename... Args> class D : public C<Args...> {}; //it works!
这样,我可以将项目传递的参数更改为模板类 C,而不必更改 D 类的所有用法。太好了。但是,如果我的模板类不仅使用类型作为参数而且还使用值呢?例如:
template<int dim=3, typename float_t=double> class GeometricObject{};
template<typename... Args> class Point : public GeometricObject<Args...>{}; //it doesnt work
当然,我可以在开头定义整数类型的最后一个模板。但这不是一种方法,如果我有 100 个不同的类都继承自 GeometricObject,然后我将默认的 dim 值更改为 2,我将不得不更改每个类的定义。
我也希望有不使用任何#define、#else 和类似预处理器命令的方法。我知道模板实际上也是预处理器命令,但是......好吧,让我们在这里变得现代;)
【问题讨论】:
-
你的值参数是和类型参数分开的吗,即值参数总是像这样
template<int x=3, int y=2, typename X = int, typename Y=double>? -
有可能。如果我不知道一般答案,那么具体答案也很好:)
-
你不能直接传递专门的模板并使用适当的typedef访问参数包吗?
-
请举个例子,我不是很好的模板弯曲者。
标签: c++11 templates inheritance