我知道这段代码是邪恶的,我知道我不应该这样做,我知道我会为此在程序员 hell 中燃烧,但无论如何:
众所周知,可以像 std::get
那样使用 int
作为 template parmerer
。
我想使用 char *
template<char * str>
struct printer {
void operator() () const {
std::cout<<str;
}
};
到目前为止,在 this article 的帮助下我设法让这个编译和运行
template<char ** str>
struct printer {
void operator() () const {
std::cout<< *str;
}
};
extern char * bla;
char * bla = (char *)"bla content";
int main() {
printer<&bla> print;
print();
}
有两个缺点:
- 双指针
- 我必须在远离我使用它们的地方定义值(字符串内容)
会很完美
printer<"bla"> print;
但是编译器显然不喜欢这样
谁能帮我克服至少后一个“问题”
编辑 我正在使用 g++ 4.8.0
最佳答案
如果你真的需要将它用作模板参数,那就来个新的尝试吧! :)
编辑:
template<char... str>
struct staticString {
static std::string c_str() {
return std::string{str...}.c_str();
}
};
基本上,char...
可变参数应该可以解决问题。
关于c++ - 指向静态作为模板参数的指针/使用 c 字符串实例化模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20274905/