从拥抱类型获取模板参数的值

Max*_*Max 1 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
    }
};
Run Code Online (Sandbox Code Playgroud)

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

template <int N>
class A
{
};

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

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

Die*_*ühl 5

您可以从专业化推断出价值:

#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();
}
Run Code Online (Sandbox Code Playgroud)