次のヘッダー ファイルを検討してください。
// Foo.h
class Foo {
public: template <typename T> void read(T& value);
};
Foo::read<T>
変数が宣言されているクラスのコンストラクターにポインターを割り当てると、インスタンス化が発生するようです。
// Foo.cc
#include "Foo.h"
template <typename T>
void Foo::read(T& value) { /* do something */ }
template <typename T> struct Bar {
Bar<T>() { void (Foo::*funPtr)(T&) = &Foo::read<T>; }
};
static Bar<int > bar1;
static Bar<long > bar2;
static Bar<float> bar3;
このソリューションは信頼性が高く、移植性があり、標準に準拠していますか? (少なくとも Intel および GNU コンパイラで動作します。)
なぜ単純に使用しないのか疑問に思っている場合は、この質問template Foo::read<int>(int&);
を参照してください。