如果您将一组有限的可能模板参数传递给模板,则确实可以在编译时对其进行评估。但是,不可能对传递的模板已使用的每个参数进行评估,因为这些类型/参数是未知的。
这是ExistentialQuantification
该类的有限参数集的解决方案。为了实现UniversalQuantification
类的行为,您只需将 更改||
为 a &&
:
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 || false || true
,因此当然是正确的。