我在 GCC 4.3.2 的 C++11 的半实现中使用 TMP,我想知道是否有办法以某种方式执行以下操作:
template <char x, char... c>
struct mystruct {
...
};
int main () {
mystruct<"asdf">::go();
}
它显然不会让我那样做,而且我认为在编译时使用用户定义的文字来转换“asdf”字符串会很幸运,但 GCC 4.3 不支持用户- 定义的文字...
有什么建议吗?我宁愿不做 'a','s','d','f',因为这严重妨碍了我对这个项目的计划。
最佳答案
我解决了一个类似的问题。我们需要为每个名称使用不同的类型
template< const char* the_name >
class A
{
public:
const char* name( void )
{
return the_name;
}
};
extern const char g_unique_name[]; // defined elsewhere
typedef A<g_unique_name> A_unique;
这将使您在编译时访问名称和唯一的实例化。但是,它不会让您在运行时访问单个字符。
如果您想要单个字符访问,实现它的唯一方法是使用用户定义的文字。 C++0x 将被扩展以允许上面 main 函数中的语法,但它仍会将模板绑定(bind)到字符指针而不是编译时字符数组。
关于c++ - 以字符数组为参数的模板元编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/711779/