gpt4 book ai didi

c++ - 使用 C++ 模板魔法进行通用和存在量化

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:23:29 24 4
gpt4 key购买 nike

有没有办法实现universalexistential使用 C++ 模板魔术进行量化(可能使用 SFINAE 等)?像这样:

template
<
template <typename Argument> class Predicate
>
struct UniversalQuantification
{
static const bool value =
/*for any Argument Predicate<Argument>::value == true ? true : false*/;
};

template
<
template <typename Argument> class Predicate
>
struct ExistentialQuantification
{
static const bool value =
/*for some Argument Predicate<Argument>::value == true ? true : false*/;
};

最佳答案

如果您将一组有限 可能的模板参数传递给模板,则确实可以在编译时对其求值。但是,不可能对传递的模板使用的每个参数都进行评估,因为这些类型/参数是未知的。

这是 ExistentialQuantification 类的有限参数集的解决方案。为了实现 UniversalQuantification 类的行为,您只需将 || 更改为 &&:

template<typename Arg>
struct Pred1;

template<>
struct Pred1<float> { static const bool value = true; };

template<>
struct Pred1<double> { static const bool value = false; };

template<>
struct Pred1<long> { static const bool value = true; };


template<template <typename Argument> class Predicate, typename... Types>
struct ExistentialQuantification;

template<template <typename Argument> class Predicate, typename Arg>
struct ExistentialQuantification<Predicate, Arg>
{
static const bool value = Predicate<Arg>::value;
};

template<template <typename Argument> class Predicate, typename Arg, typename... Types>
struct ExistentialQuantification<Predicate, Arg, Types...>
{
static const bool value = Predicate<Arg>::value || ExistentialQuantification<Predicate, Types...>::value;
};

int main()
{
std::cout << ExistentialQuantification<Pred1, long, double, float>::value << std::endl;
}

在此示例中,value 的计算结果为 true ||假 || true 因此当然是真的。

关于c++ - 使用 C++ 模板魔法进行通用和存在量化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22642790/

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