如果我在 C++ 中对返回类型的函数进行模板化:
template<class T> T foo(int x) { };
我可以使用显式模板特化来创建一个double
实例:
template<> double foo<double>(int x) { };
我尝试使用前向声明来创建 undefined 的实例struct
:
struct bar;
template<> bar foo<bar>(int x) { }
这失败了error: return type ‘struct bar’ is incomplete
。我认为这是允许的,即使在阅读了关于何时使用前向声明的公认答案?因为,在我创建 的实例之前foo<bar>
,永远不会创建显式模板化代码。显然情况并非如此(为什么不呢?)。
是否可以为编译时类型可能不存在的函数编写代码,并且仅在特定显式特化被实例化时才编译代码?这样做的动机是“重载”结构阅读器,其中重载操作是在编译之前按程序生成的(通过脚本)。