И опять синтаксис шаблонов...
От: remark Россия http://www.1024cores.net/
Дата: 03.10.05 11:27
Оценка: 1 (1)
Требуется сделать явное инстанциирование шаблонной функции, у которой параметр задаётся через traits. Сложно на словах объяснить, в общем код:


// Структура задаёт тип параметра, который принимает конструктор
template<typename Type>
struct ParamTraits
{
typedef Type ParamType;
};

// Специализация для строки
template<>
struct ParamTraits<std::string>
{
typedef const std::string& ParamType;
};

// Основной класс
class Test
{
public:
// Шаблонный конструктор
// принимает параметр типа, который определяется ParamTraits
template<typename Type>
Test(typename ParamTraits<Type>::ParamType param);
};

// Реализация конструктора
template<typename Type>
Test::Test(typename ParamTraits<Type>::ParamType param)
{
// ...
}

// Инстанциирование
#define INSTANTIATE_TEST(Type) template Test::Test(ParamTraits<Type>::ParamType)

INSTANTIATE_TEST(int);
INSTANTIATE_TEST(long);
INSTANTIATE_TEST(std::string);


При компиляции инстанциирования компилятор (msvc7.1) 3 раза (для каждого инстанциирования) выдаёт:
error C2945: explicit instantiation does not refer to a template-class specialization
error C3190: 'Test::Test(ParamTraits<Type>::ParamType)' with the provided template arguments is not the explicit instantiation of any member function of 'Test'

Как правильно записать такое инстанциирование?

Заранее спасибо за ответы.


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.