#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
Спасибо за любую помощь с этим.
Спасибо всем вам за помощь в решении этой проблемы