自定义字符串字面量

4

出于好奇,我想知道不同的文件如何将某些符号分配给它们的常规C字符串字面值,以将其转换为其他字面值。

例如...

在Objective-C中,可以通过@"..."编写NSString字面量。

在C++(我想),C++字符串字面量是这样编写的:S"..."

在wchar库中,wchar_t字面量是这样编写的:L"..."

有人能告诉我如何将MyClass文字转换为#"..."吗?

谢谢


这些是在C++中实现的。据我所知,S""并不存在;L""预定义为宽字符字面值。然而,C++11实现了用户定义的字面值。即使如此,它们只能放在末尾,并且任何不以下划线开头的内容都是保留的,如果我没记错的话。 - undefined
L""是在哪里定义的?PS也许S""是C#。 - undefined
它不在任何头文件中;它就在语言本身中,就像int和所有其他关键字一样。 - undefined
对于预处理器技术并不完全熟悉,但我认为你可能可以通过预处理器来实现类似于自定义文字的功能。 - undefined
它将其转换为const wchar_t[],实际上就像""是一个const char[]一样。 - undefined
显示剩余3条评论
1个回答

5
您可以只使用类似于这样的内容。
#include <iostream>
#include <string>

struct MyClass
{
public:
   MyClass(const char* a, size_t sz):
   s(a, sz)
   {
   }
   std::string get() const { return s; }
private:
   std::string s;
};

MyClass operator "" _M(const char* arr, size_t size) { return MyClass(arr, size); }

int main()
{
   MyClass c = "hello"_M;
   std::cout << c.get() << std::endl;
}

C++11允许用户定义字面量。但是没有定义前缀字面量的能力。 http://liveworkspace.org/code/cfff55e34d3b707e1bf0cb714e8e8f29

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接