У меня есть шаблонный шаблон, которому нужен специализированный конструктор, когда параметры шаблона являются тем же типом, что и класс. Код ниже не будет компилироваться.Вложенные шаблоны Специализация
Какой правильный синтаксис для указания использования конкретного конструктора, когда тип имеет Dual? В частности, мне нужно инициализировать элемент «real» в списке инициализаторов, когда параметр шаблона имеет тип Dual, но не тогда, когда он отсутствует (например, тип double).
template<class X> class Dual {
public:
X real;
size_t N;
std::vector<X> imag;//don't know N at compile time
Dual(size_t _N);
};
template <class X>
inline Dual<X>::Dual(size_t _N): N(_N), imag(N, 0.0) {}
template <class X>
inline Dual<Dual<X> >::Dual(size_t _N): real(_N), N(_N), imag(_N, 0.0) {}
//syntax error:
//error: cpptest.cpp:20:24: error: C++ requires a type specifier for all declarations
//inline Dual<Dual<X> >::Dual(size_t _N): real(_N), N(_N), imag(_N, 0.0) {}
//~~~~~~
int main(){
Dual <double> a(5);
Dual< Dual < double>> b(5);
}
Связанная, но не прямая причина: у вас нет конструктора по умолчанию. Как вы относитесь к построению по умолчанию типа без конструктора по умолчанию, как в своем вложенном объявлении? –
Это проблема, которую я пытаюсь решить со специализацией. Тип X является либо Двойным, который требует вызова конструктора аргументов 1 или его типа с плавающей запятой, и в этом случае это не так (значение назначается позже). –
Должно быть очевидно: Добавьте конструктор по умолчанию в свой класс 'Dual'. –