неявная реализация метода шаблона - PullRequest
0 голосов
/ 03 августа 2011

У меня есть класс, содержащий метод шаблона с нетиповым параметром шаблона. Размер кода стал действительно большим, поэтому я попытался избежать встраивания, поместив его в файл .cpp. Но я могу только создать его экземпляр для каждого нетипичного параметра.

Возможно ли неявное создание экземпляра? Как бы это выглядело? В другом связанном вопросе эта ссылка http://www.parashift.com/c++-faq-lite/templates.html предоставлена, но я не могу найти решение для неявной реализации (если есть что-то подобное) ...

class Example
{
  public: 
    template<enumExample T_ENUM> void Foo(void);
};

Я получаю ошибки компоновщика для Foo (неразрешенный внешний символ) при его использовании.

Ответы [ 3 ]

2 голосов
/ 03 августа 2011

Ваша проблема в том, что код шаблона должен быть виден в том месте, в котором он был создан. См. C ++ FAQ 35.13

Что в основном означает, что вы не можете делать то, что пытаетесь. Существует ключевое слово export, которое делает это возможным, но оно очень плохо поддерживается, и я считаю, что оно было удалено из стандарта в C ++ 0x. См. C ++ FAQ 35.14 для получения дополнительной информации.

1 голос
/ 03 августа 2011

Для неявного создания экземпляра, компилятор должен видеть реализацию шаблона функции.Обычно это означает, что реализация должна быть в заголовочном файле.Если вы просто хотите избежать встраивания, вы можете попробовать написать реализацию шаблона функции в заголовке, но вне объявления класса (хотя я не уверен, что встраивание - это ваша настоящая проблема).

0 голосов
/ 03 августа 2011

Чтобы уменьшить размер кода, вы можете попытаться уменьшить зависимости, реализовав, при необходимости, pimpl idiom .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...