2011-11-03 6 views
0

私は、ヘルパー関数をいくつかヘッダファイルに宣言しています。私はコンパイル時にコンパイラに見えるテンプレート関数の実装を行うことがfoo.hの終わりに#include "foo.cpp" を追加するだけで関数テンプレートを持つとき、通常関数テンプレートと通常の関数を混ぜる

//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) 
{ 
    ... 
} 

:それはこのようになります。しかし、関数テンプレートと通常の関数を混在させると、このアプローチはうまくいかないようです。このような場合、どのようにしてテンプレート関数と通常の関数を持つことが解決されますか?

答えて

2

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、それを使わないで削除されました)

+0

私は半分に誘惑しています誰かが 'export'キーワードで実装したことのない役に立たないことについても言及しています。そうでなければ、良い答え。 @AlexandreC。 –

+0

私は、 'export'を使うことがcppファイルを含めるよりも良いと考えました。 – Pubby

+0

この場合、私はあなたの意見を取ります。 –

関連する問題