gpt4 book ai didi

c++ - 有什么方法可以创建用户定义的类型修饰符?

转载 作者:行者123 更新时间:2023-12-01 14:58:03 25 4
gpt4 key购买 nike

我正在尝试实现lazy-c++,以实现Lazy<T>,它是std::function<T(void)>的简单类型别名。现在,我可以编写的代码如下所示:

Lazy<int> first(Lazy<int> a, Lazy<int> b)
{
return [a] { return a(); };
}

并添加以下宏:
#define lazy(T, name, ...) Lazy<T> name (__VA_ARGS__)
#define lazy_return(lazy_value) return [lazy_value] { return lazy_value(); }

首先看起来像这样:
lazy(int, first, Lazy<int> a, Lazy<int> b)
{
lazy_return(a);
}

我想要的代码是:
lazy int first(lazy int a, lazy int b)
{
return a; // <- auto-deduced lazy_return because first was marked as lazy
}

有什么办法(最好没有外部库)可以按我的意愿编写代码?

最佳答案

Is there some way (preferably without external libraries) in that I can write the code as I want to?



不。C++根本没有语法灵活性。
而且您不能使用宏系统来获取它们。

但是,我认为这里还有一个更深层次的问题。您想要的语言有一些非常简单的歧义。考虑 lazy int * a是指向惰性int的指针,还是指向int的惰性指针?

C++模板遵循一种语法,可以避免这种歧义。这两种情况的区别很简单,很明显 Lazy<int*> aLazy<int> *a

关于c++ - 有什么方法可以创建用户定义的类型修饰符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60386725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com