我有一个C ++类,可以在char
或wchar_t
上进行模板化。我需要将此类的实例与一些预定义的默认对象进行比较。因此,我想使用std::array
。该类的构造函数采用一个std::basic_string<CT>
变量(尽管我可以根据需要随意更改)。
因此,在预定义数组中,我需要提供字符串文字以满足该参数。我想避免重复自己,所以我也想模板std::array
。
是否可以以某种方式对字符串文字进行模板化,使其类型为char*
或wchar_t*
?这些字符串将仅包含ASCII字符,因此可以用char和wchar_t字符表示。
我自己做了几次尝试,包括尝试对类似于these的文字运算符进行模板化,并尝试使用constexpr模板化函数。
编辑:根据要求,这是我的尝试之一。
#include <array>
template <typename CT, size_t N>
constexpr const CT* const str(const char(&s)[N]);
template <size_t N>
constexpr const char* const str(const char(&s)[N])
{
return s;
}
template <size_t N>
constexpr const wchar_t* const str(const char(&s)[N])
{
// What to do here to convert s to a wchar_t*?
return nullptr;
}
template <typename CT>
class OuterClass
{
public:
OuterClass(const CT* string) {}
static inline std::array<OuterClass, 1> Predefined = {
{
{ str<CT>("String") }
}
};
};
int main()
{
const OuterClass<char>& o1 = OuterClass<char>::Predefined[0];
const OuterClass<wchar_t>& o2 = OuterClass<wchar_t>::Predefined[0];
}
然后我想也许可以在L""
重载的wchar_t
函数中利用str()
运算符,但是我无法确定如何调用该运算符。
我还认为也许我可以使用std::basic_string<CT>
作为返回类型,并使用一些C ++函数将char
字符串转换为wchar_t
字符串,但是C ++编译器没有允许constexpr函数返回std::basic_string<CT>
。