【发布时间】:2011-04-20 09:57:45
【问题描述】:
考虑以下头文件:
// 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&);,请参阅this question。
【问题讨论】:
-
“此解决方案是否可靠/便携/符合标准?”。对不起。我在你的问题中找不到问题陈述。怎么可能有没有问题的解决方案?
-
@Johannes:如果不清楚,请参阅链接的问题了解详细信息。我只是不知道,这种“强制显式实例化”是否适用于所有符合标准的编译器。
标签: c++ templates constructor instantiation explicit