我的功能如下:
template<typename T, typename U>
T myfunc(T a, T b) {
// the type of a.data and b.data is U
// ...
}
类型T
和U
的示例如下所示:
class ExampleT {
public:
int data;
};
T
是哪个类,其成员名为data
。 data
的类型为U
我的函数必须使用两个类型参数调用:
myfunc<T, U>(...);
但第二个类型参数(U)是第一个类型(T)中data
变量的类型。是否可以从模板中删除U
并使用decltype
检测它?
可以使用所有最新的C ++ 14功能。
答案 0 :(得分:6)
您可以将其推断为默认模板参数:
template<typename T, typename U = decltype(T::data)>
T myfunc(T a, T b) {
// the type of a.data and b.data is U
// ...
}
Demo;或者在函数体内:
template<typename T>
T myfunc(T a, T b) {
using U = decltype(T::data);
// ...
}
或使用本地typedef,如Columbo的suggested
struct ExampleT {
using Type = int;
Type data;
};
template<typename T, typename U = typename T::Type>
T myfunc(T a, T b) {
// ...
}