这是我的代码:
#include <iostream>
class c{
public:
int y;
c(int x,int p):y(x){
std::cout<<"has been made"<<std::endl;
}
};
template<int x,typename B = void>
struct checkeven{
};
template<typename B>
struct checkeven<0,B>{
typedef B type;
};
template<int x,int y,class = typename checkeven<x%2,int>::type>
struct t{
static const c tee;
static const inline c& initor(){
return tee;
}
};
template<int x,int y>
const c t<x,y>::tee(x,y); //how do i initialize?
int main(int argc, char** argv) {
//t<2,1>::initor();
//t<2,2>::initor();
return 0;
}
我试过研究它但除了删除默认值重复的建议之外我找不到任何东西。我想实现SFINAE以确保第一个值是偶数。我有一个静态const变量,我想初始化。没有我的默认课程它工作正常,但一旦我添加它,事情变得混乱。我如何初始化我的const静态成员?我也想知道为什么我的代码无效。
答案 0 :(得分:3)
您需要像这样专门化模板结构t
:
template<int x, int y>
struct t<x,y, typename checkeven<x%2,int>::type>
{
static const c tee;
static const inline c& initor(){
return tee;
}
};
使用此功能,您可以像这样初始化您的变量T恤:
template<int x, int y>
const c t<x, y>::tee(x, y);
实例here