c++ - 从拥抱类型中获取模板参数的值

标签 c++ templates template-specialization

比如说,我有一个带有整数参数的模板类:

template <int N>
class A
{
public:
    static int get_N()
    {
        return N;
    }
};

template<typename T>
class B
{
public:
    B()
    {
        cout << "N = " << T::get_N() << endl; // Accessing N via the auxiliary method
    }
};

要在类 B 中引用 N 模板参数,我必须在 A 中创建一个辅助方法。我想做这样的事情:

template <int N>
class A
{
};

template<typename T>
class B
{
public:
    B()
    {
        cout << "N = " << T::N << endl; // Accessing N directly
    }
};

问题是我将有很多 A 模板特化,我真的不想将这个辅助方法复制到所有专业类,我不想为此引入继承。 有没有可能实现我想要的?

最佳答案

您可以从特化中推断出值(value):

#include <iostream>

template <typename T> struct get_N;
template <template <int N> class T, int N>
struct get_N<T<N>> {
    static constexpr int value = N;
};

template <int N> struct A {};

template <typename T>
struct B {
    void f() { std::cout << get_N<T>::value << '\n'; }
};

int main() {
    B<A<10>>().f();
}

关于c++ - 从拥抱类型中获取模板参数的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22439686/

相关文章:

c++ - 如何轻松知道编译器选择了哪些特殊成员函数?

java - Android Native Activity - 调用 Java 方法

c++ - 如何从模板类的方法返回 std::string,无论类型如何?

c++ - 非模板类方法的条件模板特化

C++ 模板部分特化 : Why cant I match the last type in variadic-template?

java - SWIG C++ 结构到 java

c++ - 类内部的类可以调用外部类的getter方法吗?

c++ - 模板构造函数怪异

c++ - 模板特化不满足我的需要

c++ - 特化和重载有什么区别