c++ - 模板类规范的简化

标签 c++ visual-studio-2010 templates c++11 template-specialization

我对模板类的可能性非常感兴趣。现在,我想知道如何实现以下目标:

    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/

相关文章:

c++ - 将 MPL vector 转换为静态数组

c++ - 在 C++ 中具有基于模板的内存管理的通用矩阵类

c++ - STL函数和函数类型 vs 函数指针类型

c++ - Qt Creator 错误 : cannot find -lopencv_imgcodecs

c++ - 基于运行时创建变量/vector

python - Pybind11:在 Construct 上将类所有权转移到 C++

c# - 建筑问题: solutions sharing same class libraries; project promotion; forking solutions

c# - 查找未关闭的FileStream

c++ - 如何在 Windows 上的 Release模式下避免 "program.exe has stopped working"窗口?

c++ - 非静态引用成员 ‘int& Property<int>::value’ ,不能使用默认赋值运算符