gpt4 book ai didi

c++ - 类似于 `declval` 的概念

转载 作者:太空狗 更新时间:2023-10-29 19:47:36 25 4
gpt4 key购买 nike

当您使用模板和 decltype 时你经常需要某种类型的实例,即使你没有任何时间。在这种情况下,std::declval<T>()非常有用。这将创建一个 T 类型的虚构实例.

有没有类似的概念?即一个函数,它会为一个概念创建和虚构类型。

举个例子(有点做作,但应该能达到目的):

让我们定义一个概念Incrementable

template <typename T>
concept Incrementable = requires(T t){
{ ++t } -> T;
};

现在我想要一个概念来测试对象是否具有运算符 operator()可以接受 Incrementable .在我想象的语法中,我会写这样的东西:

template <typename F, typename T = declval<Incrementable>>
concept OperatesOnIncrementable = requires(F f, T t){
{ f(t) } -> T;
}

declvaltypename T = declval<Incrementable>会创建一个虚构的类型 T这不是一个真正的具体类型,但出于所有意图和目的,其行为类似于满足 Incrementable 的类型.

即将推出的标准中是否有允许这样做的机制?我会发现这非常有用。


编辑:前段时间我问了一个 similar question如果这可以用 boost::hana 来完成.


编辑:为什么这有用?例如,如果你想编写一个由两个函数组成的函数

template <typename F, typename G>
auto compose(F f, G g) {
return [f, g](Incrementable auto x) { return f(g(x)); };
}

当我尝试组合两个无法组合的函数时,我想得到一个错误。不限制类型 FG仅当我尝试调用组合函数时才会出现错误。

最佳答案

没有这样的机制。

这似乎也不是可实现的/有用的,因为有无限数量的 Incrementable 类型,并且 F 可以拒绝使用任意复杂的元程序选择的子集。因此,即使您可以神奇地合成一些独特的类型,您仍然不能保证 F 对所有 Incrementable 类型都有效。

关于c++ - 类似于 `declval` 的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53576429/

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