【发布时间】:2015-11-05 15:48:58
【问题描述】:
我有一些代码大量使用模板类。在这一点上,更改现有代码库是可能的,但不是可取的。我需要编写一个新类,它将作用于两个模板类(就这个问题而言)是任意的,除了有一个通用的模板参数。一个简化的例子:
template<typename T>
class A {
// Implementation details
};
template<typename T>
class B {
// Implementation details
};
template<typename T, typename X<T>, typename Y<T>> // This syntax is invalid!
class C {
// Implementation details
};
我需要写课程C。示例中显示的语法暗示了我想要做什么但不起作用。此处的模板参数X 和Y 必须通过采用相同的模板参数T 来“绑定在一起”。除此之外,它们可以是任意的。
这意味着“类似”C<std::string,A<std::string>,B<std::string>> 应该是有效的,但 C<std::string,A<std::string>,B<std::map>> 不应该是有效的,因为 A 和 B 没有相同的模板参数。 (引号中的“like”再次表示上面C的声明语法仍然错误。)
其他尝试(也失败了)包括:
template<typename T, template<typename> class X<T>, template<typename> class Y<T>>template<typename T> template<typename X<T>, typename Y<T>>
这样的事情可能吗?如果有,语法是什么?
谢谢!
【问题讨论】:
-
只需使用
template<typename T, template<typename> class X, template<typename> class Y>,然后在C中的任何需要的地方使用X<T>和Y<T>。