考虑以下头文件:
// 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&);
请参阅此问题。