1

テンプレートが C で定義されていないことはわかっています。ただし、私の場合、C で記述されたアプリケーションで使用される C++ で記述された API があります。API にテンプレート関数を追加したいと考えています。この関数は、abc.cpp で次のように定義されています。

template<typename T> T function_name(T param1){
  ...
  ...
  return val;
}

abc.hpp の宣言は次のとおりです。

template<typename T> T function_name(T);

この関数は xyz.c から次のように呼び出されます。

int a ,b = 5;
a = function_name(b);

ただし、abc.cpp と abc.hpp の両方で次のエラーが表示されます。

 error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘&lt;’ token
 template<typename T>

extern "C" を使用しても役に立ちません (エラーにつながります: C リンケージを持つテンプレート)。私の疑問は、このテンプレート関数をそのような方法で呼び出すことさえ可能ですか? はいの場合、どうすればこれを達成できますか? ありがとうございました。

4

3 に答える 3

1

既に C と C++ を混在させているため (したがって、考えられる問題に対処している必要があります)、別の解決策は、C++でアプリケーションを開発し続けることです。そうすれば、新しいコードは、テンプレート ;-)、オーバーロードされた関数など、C++ ライブラリの優れた機能をすべて使用でき、生産性を大幅に向上できる C++ の標準ライブラリにアクセスできます。

アプリケーションの新しいソース ファイルに C++ を使用することに大きな障害はないと思います。編集時に既存の C ファイルを C++ に切り替えることが簡単に可能であり、価値があるかどうかは別の問題です。

于 2016-11-18T13:48:24.657 に答える
0

C はテンプレートをサポートしていないため、型ジェネリック関数 (ジェネリック式を定義するマクロベースの方法) の使用を検討できます。

そうでない場合は、C++ コンパイラを使用することをお勧めします。

于 2016-11-18T22:10:55.033 に答える