我对模板类的可能性非常感兴趣。现在,我想知道如何实现以下目标:
Const<5>::getValue();
目前我可以这样做:
Const<int, 5>::getValue());
这就是类的实现:
template <typename T, T value>
class Const {
public:
typedef T Type;
static T getValue() {
return value;
}
};
我知道这只是一个非常愚蠢的例子,但一旦我能做到这一点,我就可以简化以下行:
Getter<int, TestClass, &TestClass::get> getter;
只是:
Getter<&TestClass::get> getter;
那将是测试类:
class TestClass {
private:
int _value;
public:
int get() {
return _value;
}
};
感谢您的帮助!
[编辑-1]
关于 J.N.是的,C++11 就可以了。
关于 Xeo,我尝试使用 #define AUTO_ARG(x) decltype(x), x
但这在 TestClass 中不起作用。
[编辑-2]
关于 KennyTM,当我声明 Getter<...> g
在 TestClass 中它不适用于 Getter<AUTO_ARG(&TestClass::get)>
它只适用于 Getter<int (TestClass::*)() const, &TestClass::get>
.
现在我想知道这是否只是 Visual Studio 中的一个错误???
最佳答案
您仍然可以使用 @Xeo's link 给出的 AUTO_ARG(x)
.如果您需要获取返回类型或类类型,只需使用模式匹配(即模板特化):
template <typename T, T mem_fun_ptr>
struct Getter;
template <typename R, typename C, typename... A, R (C::*mem_fun_ptr)(A...) const>
struct Getter<R (C::*)(A...) const, mem_fun_ptr>
{
typedef R return_type;
typedef C class_type;
};
#define AUTO_ARG(x) decltype(x),(x)
class TestClass {
private:
int _value;
public:
int get() const {
return _value;
}
};
Getter<AUTO_ARG(&TestClass::get)> g;
关于c++ - 模板类规范的简化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9628035/