#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
感谢您的帮助。
感谢大家帮助我解决这个问题
答案 0 :(得分:3)
您的代码有几个错误:
T
IsPolymorphic<T>
IsPolymorphic<T>::value
intead
答案 1 :(得分:2)
试试这个:
template<class T, bool isPoly = IsPolymorphic<T>::value>
答案 2 :(得分:1)
也许你的意思是:
bool isPoly = IsPolymorphic<T>::value