Я понимаю, что определения шаблонов должны быть помещены в файл заголовка. Означает ли это, что все определения классов, которые шаблон использует (прямо или косвенно), необходимо помещать в файлы заголовков?о шаблоне кода orginisation: где поставить код, который использует шаблон
У меня есть шаблон, который имеет много классов, от которых он зависит, и, следовательно, должен помещать их все в файл заголовка, иначе я получу «ошибку LNK2019: неразрешенный внешний символ». Есть ли лучшее решение в плане организации кода?
Пример:
double inline MainFunction(double price, const Params& params)
{
Price<ModeEnum::NORMAL> pricer(price);
MethodOne<ModeEnum::NORMAL> methodOne;
return pricer.func(methodOne, params) ;
}
template<ModelEnum::Enum Mode>
struct Price
{
double price;
typedef double return_type;
Price(double price_) : price(price_){}
template<typename T> double func(const T& method, const Params& params) const
{
const typename T::PriceFactor factor(params);
return factor ..... ;
}
};
Т :: PriceFactor фактически класс В, что является определение типа определено в tempalte метадона. Из-за этого я должен поместить конструктор класса B и все (много) функции и класс, которые он использует в заголовочном файле.
Вы по-прежнему можете использовать '# include' для разделения различных классов между файлами. Можете ли вы дать небольшой пример, только с именами фиктивных классов? – pippin1289
[Вперед объявить] (http://stackoverflow.com/questions/4757565/c-forward-declaration) все, что вы можете. –
хорошо. это tempalte. Поэтому я думаю, что тело также очень важно – KKKoo0