c++ - 指向静态作为模板参数的指针/使用 c 字符串实例化模板

标签 c++ string templates pointers static

我知道这段代码是邪恶的,我知道我不应该这样做,我知道我会为此在程序员 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();
}

有两个缺点:

  1. 双指针
  2. 我必须在远离我使用它们的地方定义值(字符串内容)

会很完美

printer<"bla"> print;

但是编译器显然不喜欢这样

谁能帮我克服至少后一个“问题”

编辑 我正在使用 g++ 4.8.0

最佳答案

如果你真的需要将它用作模板参数,那就来个新的尝试吧! :)

编辑:

http://ideone.com/NGgXxT

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/

相关文章:

c++ - 如果模板化,g++ 不会调用复制构造函数吗?

c++ - 为什么没有选择模板特化?

PHP 最佳设计实践

c++ - 如何计算连续出现两次的字符

python - 如何检查 pandas 中的列是否以 a 或 b 结尾

java - 在字符串中返回 "Java"新行?

c - 字符串指针数组中字符的频率

c++ - 在类构造函数中使用时,Lambda 无法隐式转换

c++ - 通过 linux 命令行执行时可执行文件运行正常 - 通过 c++ system() 命令调用时出现运行时错误

c++ - 在头文件中使用 lambda 会违反 ODR 吗?