gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:29:09 25 4
gpt4 key购买 nike

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

    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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com