好吧,在半死不活地搜寻自己并且没有找到实际上似乎可行的答案之后,我要问:
说我上了一个类(人为的例子,但希望到目前为止足够好)
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/