[C++] Шаблонный конструктор

erotic

Есть нешаблонный класс с шаблонным конструктором, шаблон по типу. У конструктора параметров нет, так что тип по параметрам не выводится и должен быть указан явно. И тут главный косяк:

class OMG
{
public:
template <typename T>
OMG{cout << "wow" << endl;}
}

OMG* p = new OMG;
// error C2512: 'omg::omg' : no appropriate default constructor available

OMG* p = new OMG<int>
// error C2512: 'omg::omg' : no appropriate default constructor available
// error C2062: type 'int' unexpected


Пока приходится обходиться шаблонной функцией, которую надо вызвать сразу после конструктора, с ней-то проблем нет. Но может быть кто-нибудь знает - можно ли все-таки вызвать шаблонный конструктор?

okunek

Походу семантикой не предусмотрен вызов шаблонного конструктора, в случае, когда компилятор не может сам сдедуктить аргументы шаблона (в данном случае, никаких аргументов у конструктора нет). А конструкция "new OMG<int>" пытается создать экземпляр шаблонного класса, а не обычного с вызовом шаблонного конструктора.
компилятор ругается:

class A
{
public:
template <class T> A { }
};

int main
{
A *a;
a = reinterpret_cast<A*>(new char (sizeof(A;
a->A::A<float>
a->A::~A;
}

Но даже если бы этот грязный хак и сработал, то это было бы очень-очень плохо. Так что советую пересмотреть свои классы, конструкторы и прочее.

poi1981

>нешаблонный класс с шаблонным конструктором
мне вот интересно, зачем это нужно

erotic

Чтобы базовый класс был одного типа. Если делать класс шаблонным, то типы будут разные.

Dasar

обычно такое обходится через dummy-параметр и маскируется через фабрику

class Q
{
template <typename T>
private Q(T *dummy){}

template <typename T>
public static Q * Create<T>
{
return new QT*)0);
}
};

erotic

Точно, можно и так делать
Спасибо.
Оставить комментарий
Имя или ник:
Комментарий: