• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:外部ファイルでのtemplate関数の実装方法)

外部ファイルでのtemplate関数の実装方法

このQ&Aのポイント
  • 外部ファイルでのtemplate関数の実装方法について質問しています。
  • main.cppでsub.cppのtemplate関数を呼び出すことができず、リンクエラーが発生しています。
  • 対処方法についてアドバイスを求めています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

> なぜリンクエラーになるのか sub.cpp: template<typename T> T max(T x, T y) { return x > y ? x : y; } こんなのがあったとき、他のコードで max<int> や max<long> が使われていることを sub.cpp は知りませんよね。 template引数として何が使われるかわからない限りsub.cppをコンパイルできんでしょ? だからリンクエラー。

ahco_i-o
質問者

お礼

おっしゃる通りです。。 確かにエラーは当然の結果ですね。 わかり易い説明をありがとうございました。 ちなみに sub.cppに template double sub_t(const vector<double>&); を記述して template引数として何が使われるかわかるようにsub.cppをコンパイルする方法もあるみたいですね。 hファイルに実装するか、上記のように実体をつくるか、検討してみます。

その他の回答 (1)

回答No.1

sub.cpp を sub.h とし、main.cppで#includeする。

ahco_i-o
質問者

補足

質問の仕方が悪かったです。 外部ファイルというか、外部オブジェクトのテンプレート関数を呼び出したいのです。 sub.hにテンプレート関数を記述してインクルードしても、 それはmain.cppに記述することと何も変わらなくないですか? 提示のソースはあくまでサンプルであり、 sub.cppに相当する実際のソースには、ほかにもいろんな関数を実装していますので、 ヘッダにするのはやりたくありません。 なぜリンクエラーになるのか、根本的な解決方法はないのか、を知りたいのです。 宜しくお願いします。

関連するQ&A