模板的另一个问题

时间:2010-09-16 11:16:54

标签: c++ templates

#include "stdafx.h"
#include <iostream>
using std::cout;

template<class T>
class IsPolymorphic
{
 template<class T>
 struct Check
 {
  enum {value = false};
 };

 template<class T>
 struct Check<T*>
 {
  enum {value = true};
 };
public: 
 enum {value = Check<T>::value};

};

template<bool flag, class T, class U>
struct Select
{
 typedef T value_type;
};

template<class T, class U>
struct Select<true,T,U>
{
 typedef U value_type;
};

template<class T, bool isPoly = IsPolymorphic<T>>
class Container
{
public:
 typedef typename Select<isPoly,T,T*>::value_type value_type;
 Container(){}
};

int _tmain(int argc, _TCHAR* argv[])
{
 //cout << IsPolymorphic<int*>::value;
 Container<int> c;
 return 0;
}

我遇到以下错误:
错误3错误C2512:'容器':没有合适的默认构造函数
错误2错误C2133:'c':未知大小
错误1错误C2975:'容器':'isPoly'的模板参数无效,预期的编译时常量表达式

至于这些错误:
没有3 - 显然有dflt ctor - 所以发生了什么? 没有2 - 为什么它的大小不明?我已经指定int作为一个类型,为什么它不知道?
没有1 - 完全没有2
感谢您的帮助。
感谢大家帮助我解决这个问题

3 个答案:

答案 0 :(得分:3)

您的代码有几个错误:

  • 您尝试通过该名称的内部声明隐藏模板参数T
  • 您使用IsPolymorphic<T>
  • IsPolymorphic<T>::value intead
  • @potatoswatter 的内容。

答案 1 :(得分:2)

试试这个:

template<class T, bool isPoly = IsPolymorphic<T>::value>

答案 2 :(得分:1)

也许你的意思是:

bool isPoly = IsPolymorphic<T>::value