У меня есть три класса:Инстанцирование шаблонных классов с шаблоном параметров
//Template class for function 1
template<class P> class wrap4{
P p;
public:
wrap4(P&& p1) : p(std::forward<P>(p1)) {}
double f(double x){
return p.FN(x);
}
};
//Simple concrete parameter
struct Parameter{
double FN(double x){
return x;
}
};
//Method used in the program
template<class Function> class B {
Function F;
public:
B(Function && f) : F(std::forward<Function>(f)) {}
double use(double x){
return F.f(x);
}
};
template<class Function> B<Function> make_B(Function && F){ return B<Function>{std::forward<Function>(F)}; }
template<class P> B<P> make_wrap4(P && F){ return B<P>{std::forward<P>(F)}; }
В принципе, я хочу, чтобы подключить wrap4
в B
, но для этого я должен создать его экземпляр с Parameter
. Я попробовал следующее:
auto A = make_B(make_wrap4{Parameter p});
, но это не работает, я получаю ошибку компилятора
error: conversion from 'B<B<Parameter> >' to non-scalar type 'B<wrap4<Parameter> >' requested
Конечно, это глупый пример, потому что я знаю, что могу просто реализовать B
с Parameter
, но, конечно, я пытаюсь сделать что-то более сложное в конечном счете, где мне действительно нужен B
, чтобы взять класс шаблона, который не допускает конструктор по умолчанию в качестве аргумента.
Нужно ли мне реализовать шаблон шаблона здесь?
Спасибо! Это была довольно заторможенная ошибка: D Также спасибо за заметки. – Plamen
Да, извините за то, что вы nitpicking, но бывают случаи, когда такие вещи делают разницу между пониманием и непониманием проблемы, особенно на SO;) –
Вы абсолютно правы. Я был честен, когда я сказал спасибо! Я совершенно новичок в шаблонах, которые, как я думаю, блестящие - многие нюансы мне еще неизвестны. – Plamen