【发布时间】:2011-05-01 15:42:12
【问题描述】:
好的,这里完整的伪代码。
template <typename T>
void fun(/*...*/)
{
some_meta_typelist pushback T;
}
所以这个想法是,在任何时候实例化这个函数,它都会增长 some_meta_typelist 对象。如果这是跨边界完成的,是否可以保证在可能在 MPL::fold 函数中使用类型列表之前编译对这个模板构建机制的所有调用。何时对这些进行评估,您何时可以确定它们已完成?这是否应该仅限于编译单元并且永远不会跨越 .cpp 边界?是否有等效于调用带有静态变量的函数以确保在使用前已创建对象?
更新
我正在研究这样一种想法,即调用系统的对象将构建系统完成工作所需的类型列表。我的感觉是类型列表将完全取决于编译顺序,因此不是单个文件 CPP 之外的有效方法。我知道 MSVC 是按字母顺序编译的,或者至少以前是按字母顺序编译的,所以我可以将最终文件命名为 ZZZZ.cpp,最终我的意思是需要完全构建的类型列表的文件。这不是一个安全或兼容的解决方案。是这样吗?有解决办法吗?
谢谢大家
【问题讨论】:
-
我可以回答之前的第二个问题:您使用的是什么折叠功能?我只知道 Boost 版本,它是一个结构。你能把我链接到文档吗?
-
考虑到您可以根据 C++ 模板解析规则制作一本书,因此不要对全面的答案寄予厚望。
标签: c++ templates metaprogramming boost-mpl