【问题标题】:pointer to static as template parameter / instantiate a template using a c string指向静态的指针作为模板参数/使用 c 字符串实例化模板
【发布时间】:2013-11-28 21:21:25
【问题描述】:

我知道这段代码是邪恶的,我知道我不应该这样做,我知道我会为此在编码器地狱中燃烧,但无论如何:

众所周知,可以将int 用作template parmerer,就像std::get 一样。 我想使用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

【问题讨论】:

    标签: c++ string templates pointers static


    【解决方案1】:

    如果你真的需要将它用作模板参数,那么这里是一个新的尝试! :)

    编辑:

    http://ideone.com/NGgXxT

    template<char... str>
    struct staticString {
        static std::string c_str() {
            return std::string{str...}.c_str();
        }
    };
    

    基本上,char... variadic 应该可以解决问题。

    【讨论】:

    • 我在尝试使用此类时得到error: could not convert template argument ...
    • @Valerij 好吧,它确实在 IDEone 中编译:)。
    • 但不是我打算用作模板参数时
    • @Valerij 如果您不仅需要编译时字符串(但实际上真的很想将其用作模板参数),请尝试此操作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    相关资源
    最近更新 更多