如果我能将lambda用作用户定义的文字,我会喜欢它,因为那时我可以做类似的事情:
struct Context
{
// Maintains important context information
};
struct Foo
{
Foo(Context& context, int value); // Foo needs a context to operate on
};
struct Factory
{
Context& context;
Factory(Context& context) : context(context) {}
Foo operator() (int value) const
{
return Foo(context, value);
}
}
int main()
{
Context context;
Factory factory(context);
// I'd like to do something like this, but obviously it doesn't work
using
Foo operator"" _f = [&factory](int value) { return factory(value); };
Foo x = 123_f;
// But since that doesn't work, I have to do this:
Foo x = factory(123);
}
基本上,我有一些依赖于特定上下文的对象(垃圾收集器)。为了创建这些对象,我必须将上下文传递给对象的构造函数,或者我必须创建一个工厂(在内部存储上下文)。
我有很多我正在使用的文字(我正在创建lexing / parsing语法)。对我来说,保持这些复杂的语法尽可能可读是很重要的,如果我将123_f
重命名为{{},我个人认为factory(123)
比f(123)
(甚至factory
更具可读性{1}})。
我很想使用用户定义的文字,但据我所知,我无法捕捉用户定义文字的某种“工作环境”。我对用户定义的文字的理解是它们是在全局范围内定义的,因此只能访问全局对象,这是我想要避免的(我在整个项目中有不同的语法)。
有没有办法创建一个适用于某些本地上下文的用户定义文字?