c++ - 具有std::enable_if_t的模板类,静态const成员初始化

标签 c++ templates initialization enable-if

好吧,在半死不活地搜寻自己并且没有找到实际上似乎可行的答案之后,我要问:

说我上了一个类(人为的例子,但希望到目前为止足够好)

template <typename T, std::enable_if_t< MyConditional<T>::value >>
class MyClass
{
public:
    static const MyClass ZeroInited;

    MyClass(int x, int y) 
        : m_X(x)
        , m_Y(Y) 
    {
    }

    ...
};

如何正确初始化ZeroInited *?正确的语法使我难以理解(或者也许我太累了),让工具“Create Implementation”也无法产生正确的输出。它的

感谢大家!

*)PS:在模板化情况下,不是专门化的。如果我省略了enable_if_t,这很简单:
template <typename T> const MyClass<T> MyClass<T>::ZeroInited {0, 0};

但是一旦enable_if_t发挥作用,我就不知道如何更改它。

最佳答案

问题

template <typename T, std::enable_if_t< MyConditional<T>::value >>

是您希望void 作为第二个参数不存在。
  • 使用
    template <typename T, std::enable_if_t< MyConditional<T>::value, bool> = false>
    class MyClass{/*..*/};
    


    template <typename T, std::enable_if_t< MyConditional<T>::value, bool > B>
    const MyClass<T, B> MyClass<T, B>::ZeroInited{0, 0};
    

    Demo

  • template <typename T, typename /*U*/ = std::enable_if_t< MyConditional<T>::value>>
    class MyClass{/*..*/};
    


    template <typename T, typename U>
    const MyClass<T, U> MyClass<T, U>::ZeroInited{0, 0};
    

    Demo
  • 关于c++ - 具有std::enable_if_t的模板类,静态const成员初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62438340/

    相关文章:

    c++: 字符串常量的地址

    c++ - 已定义构造函数的无法识别的构造函数

    不同内存位置中的 C++ 默认数组值

    c++ - 如何用 0 memset 匿名 union

    c++ - 如何使用 gcc 编译 SIMD 代码

    c++ - 需要一个正则表达式来仅从字符串中提取字母和空格

    c++ - 有条件的模板特化

    c++ - 定义与变量 a 相同类型的变量 b

    c++ - 初始化作为模板实例的基类不需要模板参数吗?

    Android:如何正确初始化 YouTube 播放器内部 Activity ?