从模板化基类检索 constexpr 的 C++ 元函数

标签 c++ metaprogramming

我的代码看起来像这样:

template <typename Tag, int v>
struct Const
{
    static constexpr int value = v;
};


struct Compound
    :
    Const<struct T1, 111>,
    Const<struct T2, 222>
{
    Compound(); // constructor is not constexpr
};

我想知道以 struct T1struct T2 作为参数的编译时构造(例如元函数)可以提取为 constexpr int 111222 分别来自 Compound

我想我想要一个看起来像这样的元函数,但不知道如何编写它:

template <class C, typename Tag>
struct GetConst
{
    static constexpr int value = /* some magic */
};

GetConst<Compound, struct T1>::value == 111
GetConst<Compound, struct T2>::value == 222

有什么想法吗?

最佳答案

语法略有不同(constexpr 函数而不是静态成员变量),但这里是:

template <typename Tag, int v>
constexpr int getVal(Const<Tag, v>) {
    return v;
}

template <class C, typename Tag>
constexpr int GetConst() {
    return getVal<Tag>((C*)nullptr);
}

constexpr int value = GetConst<Compound,T2>();
int main() {        
    std::cout << value << std::endl;
}

关于从模板化基类检索 constexpr 的 C++ 元函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37973436/

相关文章:

c++ - 默认构造函数是否总是初始化所有成员?

c++ - COM - 在 C++ 中使用 IEnumerable

ruby - 将值传递到使用 Class.new 创建的类中

c++ - 如何创建依赖于元组类型名的 boost 元组?

c++ - UDP数据包排列

c++ - 为后期初始化转发参数

c# - 如何在编译时检索泛型基类的参数? (即不使用反射)

ruby - 输出一个ruby方法的源码

c++安全地通过引用传递并在编译时检查大小

r - 剪接R中的bquote