C++模板继承隐藏模板参数

mkm*_*afa 12 c++ templates c++11

template <typename>
struct B
{
    constexpr static int T = 5;
};

template <int T>
struct D : B<int>
{
    constexpr static int value = T;
};

int main()
{
    std::cout << D<7>::value << std::endl; // 5, how to get 7 ?
}
Run Code Online (Sandbox Code Playgroud)

演示

正如我最近了解到,在查找期间在基类中的名称之后检查模板派生类的模板参数.话虽如此,无论如何都要限定名称T初始化value以引用T派生类的模板参数?

编辑:

到目前为止,评论中的讨论似乎是实现这一点的唯一方法是使基类类型/值依赖,这将延迟查找基数的名称(到实例化阶段),从而使唯一可用的值for T是模板参数.

Ala*_*les 8

我不完全确定我理解这个问题,但我想decltype你做了什么:

template <int T>
struct D : B<decltype(T)>
{
    constexpr static decltype(T) value = T;
};
Run Code Online (Sandbox Code Playgroud)

  • 什么......哦.你是人为地使`B <int>`依赖于`T`,所以除非合格,否则不会考虑它的范围......讨厌! (3认同)
  • 你也不需要第二个decltype,AFAIK使基类类型依赖就足够了 (2认同)