私は本を読んで自分自身でC++を学び、その本から運動しようとしています。関数を.cppファイルの関数テンプレートにパラメータとして渡すときの宣言方法は?
今、私は関数テンプレートのインスタンスを.cppファイル内で宣言しようとしています。私は、ヘッダファイルにその関数テンプレートを宣言/定義することができますが、.cppファイル内でそれを行う方法についてはまだ興味があります。ここで
簡単ですが、私の問題を示すコードの一部です:
// temp_func.h
#ifndef GUARD_temp_func
#define GUARD_temp_func
#include <iostream>
using std::cout; using std::endl;
int addone(int);
int addtwo(int);
template<typename F>
void call_adds(int, F);
#endif
ヘッダファイル
// temp_func.cpp
#include "temp_func.h"
using std::cout; using std::endl;
int addone(int n)
{
return n + 1;
}
int addtwo(int n)
{
return n + 2;
}
template<typename F>
void call_adds(int n, F f)
{
cout << f(n) << endl;
}
template void call_adds<addone>(int n, F addone);
.cppファイル、および明らかに最後の行は動作しません。
編集: n.m.で提供されるソリューションに基づく。
template<int F(int)>
void call_adds(int n)
{
cout << F(n) << endl;
}
template void call_adds<addtwo>(int);
template void call_adds<addone>(int);
わかりません私は答えを完全に理解しています。タイプパラメータとして 'addone'を渡すことができないので、ヘッダーに関数テンプレートの定義を入れたくない場合は、提案した答えとしてテンプレートパラメータを使用する必要があります。 –
また、最後の行を 'template <>'の代わりに 'template'に変更してコードを動作させる必要があります。 –
いくつかの読書をした後、あなたはテンプレートの専門化の提案をしているようです。私はそれが必要とは思わない。私は 'Explicit instantiation'を必要とします。http://www.cplusplus.com/articles/1C75fSEw/ –