初始化一个静态const变量给出了非模板const的模板定义

时间:2015-07-25 06:11:55

标签: c++

这是我的代码:

#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静态成员?我也想知道为什么我的代码无效。

1 个答案:

答案 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