开发者

Type condition in C++ template class problem

Using GCC 4.2. I have this metatemplate for conditional type:

template <bool condition, typename Then, typename Else>
struct IF
{
    typedef Then RET;
};

template <class Then, class Else>
struct IF<false, Then, Else>
{
    typedef Else RET;
};

and when I use it like this:

template <ty开发者_如何学运维pename T>
class Param
{
    IF< sizeof(int)<sizeof(long), long, int>::RET  i;
};

it works, but when I use it like this (trying to use template parameters):

template <typename T>
class Param
{
    IF< sizeof(int)<sizeof(long), T&, T* >::RET mParam;
};

I am getting this error code:

error: type 'IF<false, T&, T*>' is not derived from type 'Param<T>'

Why is it happening? How to solve it? Thanks in advance!


In the second case, what RET is, depends on the template type T. The compiler needs to be assured that it is going to be a type in all possible instantiations (and not perhaps a static member of some instantiation of IF). You do so with the typename keyword.

template <typename T>
class Param
{
    typename IF< sizeof(int)<sizeof(long), T&, T* >::RET mParam;

};
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜