gpt4 book ai didi

c++ - 多条件模板特化 C++

转载 作者:搜寻专家 更新时间:2023-10-31 01:25:59 26 4
gpt4 key购买 nike

我有一个结构

template <typename A, typename B>
struct foo {static const int type = 0;};

AB 都是算术时,我希望实现不同。然而,这没有用。

template <typename A, typename B, typename std::enable_if<
std::is_arithmetic<A>::value &&
std::is_arithmetic<B>::value, bool>::type = 0>
struct foo<A, B> {static const int type = 1;}

我收到编译器错误 default template arguments may not be used in partial specializations。那么我怎样才能让它发挥作用呢?

要记住的一件事是,我还想要其他更简单的模板特化,可能看起来像这样。

template <>
struct foo<string, vector<int>> {static const int type = 2;}

总而言之,我希望第一个定义类似于默认值,然后定义一堆专门的实现,其中一个是通用的。

最佳答案

您可以定义 primary template , partial specializationfull specialization分别点赞

// the primary template
template <typename A, typename B, typename = void>
struct foo {static const int type = 0;};

// the partial specialization
template <typename A, typename B>
struct foo<A, B, typename std::enable_if<
std::is_arithmetic<A>::value &&
std::is_arithmetic<B>::value>::type> {static const int type = 1;};

// the full specialization
template <>
struct foo<string, vector<int>, void> {static const int type = 2;};

LIVE

关于c++ - 多条件模板特化 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55998031/

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