<分区>
我正在尝试找到一种舒适的方式来将字符串文字作为模板参数传递。我不关心支持尽可能多的编译器,我使用的是带有 --std=c++0x
的最新版本的 g++。
我尝试了很多可能的解决方案,但都让我失望。我有点想放弃了,但首先我想知道为什么其中有几个失败了。
他们在这里:
#include <iostream>
#include <string>
using namespace std;
struct String {
char const *m_sz;
constexpr String(char const *a_sz)
:
m_sz(a_sz) {}
char const *operator () () const {
return m_sz;
}
};
template<class _rstr>
string const Get() {
return _rstr();
}
int main() {
cout << Get<String("hello")>() << endl;
return 0;
}
和:
#include <iostream>
#include <string>
using namespace std;
struct String {
char const *m_sz;
constexpr String(char const *a_sz)
:
m_sz(a_sz) {}
};
template<String const &_rstr>
string const Get() {
return _rstr.m_sz;
}
int main() {
String constexpr str = "hello";
cout << Get<str>() << endl;
return 0;
}
我们的目标是找到一种舒适的方式将字符串文字传递给无用的 Get 函数,该函数将其模板参数作为 std::string 对象返回。
编辑:抱歉,也许我的主要问题不清楚。我的问题是:为什么这两个片段会失败?