cyt*_*nox 14 c++ string templates
我有很多这样的类/方法:
template<typename CharT, typename TraitsT = std::char_traits<CharT> >
struct Foo
{
std::basic_string<CharT, TraitsT> getFoo(void) const
{
return "Foo"; // + this->member_var1 + this->member_var2...
}
};
Run Code Online (Sandbox Code Playgroud)
但是根据CharT,我必须使用"","",""或"U"(对于char,wchar_t,u16char_t,u32char_t).
必须使用什么语法来创建与此类模板参数无关的字符串?
你真的需要不同的文字,还是可以使用迭代器构造函数?
const char *f = "Foo";
return std::basic_string<CharT, TraitsT>(f, f + 3);
Run Code Online (Sandbox Code Playgroud)
如果您担心将来更改文字的容易程度,可能会比那里的"3"更强大.
为了回应这个不太好的观点,那么:
template <typename CharT, typename TraitsT, size_t N>
basic_string<CharT, TraitsT> proper_string(const char (&src)[N]) {
return basic_string<CharT, TraitsT>(src, src+N-1);
}
Run Code Online (Sandbox Code Playgroud)
然后你有:
return proper_string<CharT, TraitsT>("Foo");
Run Code Online (Sandbox Code Playgroud)
如果你真的需要不同的文字,那么到目前为止我唯一想到的就是为它创造特征,这真的太可怕了:
template<typename T> struct FooString {
};
template<> struct FooString<char> {
static const char *value() { return "Foo"; }
};
template<> struct FooString<wchar_t> {
static const wchar_t *value() { return L"Foo"; }
};
... etc ...
return FooString<CharT>::value();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
743 次 |
最近记录: |