gpt4 book ai didi

c++ - 只有当两个模板参数相同时,有没有办法覆盖模板方法匹配?

转载 作者:行者123 更新时间:2023-12-01 13:51:37 24 4
gpt4 key购买 nike

我有一个函数调用:

template <typename A, typename B> bool foo();

我想覆盖它,以便 A 和 B 是相同类型的任何调用都转到一个特殊的函数覆盖。我在想这样的事情:
template<typename A>
bool foo<A,A>()
{ return false; }

但是,此代码无法编译,而且我找不到任何可能有效的代码。到目前为止,我的求助方法是明确覆盖所有可能的类型:
template<> bool foo<class1,class1>() { return false; }
template<> bool foo<class2,class2>() { return false; }
template<> bool foo<class3,class3>() { return false; }

但这是不雅的,需要在引入新类(class)时进行维护。

感谢您的任何想法。

编辑:
需要明确的是,当 A 与 B 的类型不同时,我的代码如下:
 template<typename A, typename B> 
bool foo() {
Thing<A,B> instance; // Thing<A,A> is never legal and will not compile
}

(代码被调用是因为我正在尝试 B 对 A 的所有可能组合,反之亦然。我希望用编译器轻松处理这个问题,而不是在每个 B 上实现 if-then 测试以确保它没有' t 匹配 A。也许有更好的方法可以做到这一点,但我认为这种设计会很优雅。)

最佳答案

您的尝试无法编译,因为部分函数模板特化 ( template<typename A> bool foo<A,A>() ) 是不允许的。通常的解决方法是使用重载,因为模板参数经常作为函数参数出现。在您的情况下(没有函数参数),如果 C++17 可用,您可以使用 if constexpr连同 <type_traits>标题,例如

#include <type_traits>

template <typename A, typename B> bool foo()
{
if constexpr (std::is_same_v<A, B>)
return true;
else
return false;
}

关于c++ - 只有当两个模板参数相同时,有没有办法覆盖模板方法匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58523155/

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