Смешивание шаблонов функций и обычных функций - PullRequest
0 голосов
/ 04 ноября 2011

У меня есть пара небольших вспомогательных функций, объявленных в заголовочном файле.Это выглядит так:

//contents of foo.h
#ifndef FOO_H
#define FOO_H

void foo1(int a);
template <class mType>
void foo2( mType b);

#endif

//contents of foo.cpp
#include foo.h

void foo1(int a)
{
  ...
}

template <class mType>
void foo2( mType a)
{
  ...
}

Обычно при наличии только шаблонов функций я бы добавил #include "foo.cpp" в конец foo.h, чтобы сделать реализацию функций шаблона видимой для компилятора во время компиляции.Однако при смешивании шаблонов функций и обычных функций этот подход, похоже, не работает.Как решить проблему с шаблонными и обычными функциями в таком случае?

1 Ответ

2 голосов
/ 04 ноября 2011

Вы никогда не должны включать файл cpp.

Поместите реализацию шаблона в заголовочный файл. Если вы хотите сохранить его отдельно, создайте 2 заголовочных файла.

//contents of foo.h

void foo1(int a);

template <class mType>
void foo2( mType a)
{
...
}

//contents of foo.cpp
#include foo.h

void foo1(int a)
{
...
}

(В качестве альтернативы есть ключевое слово export, хотя ни один из основных компиляторов не поддерживает его, и оно было удалено в C ++ 11 Другими словами, не используйте его)

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