gpt4 book ai didi

c++ - 具有三元运算符和模板的自动

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

我有一个模板类

template <typename T>
class foo;

T有2个有效值,对应于:

using fooT1 = class foo<T1>;
using fooT2 = class foo<T2>;

我想编写如下代码:

const auto* fooPtr = useFooT1 ? getFooT1Ptr() : getFooT2Ptr();

因为在此函数中使用 fooPtr 的代码不依赖于 fooPtr 的类型是 fooT1 还是 fooT2

但是,我得到以下编译器错误:

error: conditional expression between distinct pointer types ...

我明白,根据 C++ 标准,应该有一个共同的类型,两者都可以转换为,所以这种方法可能行不通。

在不复制大量代码的情况下实现此功能的好方法是什么?

最佳答案

事实上,C++ 是静态类型的,因此变量的类型不能依赖于运行时条件。

相反,将通用代码放入模板中:

template <typename T> doStuff(foo<T> * f) {
// stuff that works with any `foo` type
}

并根据运行时变量调用不同的特化

if (useFooT1) {
doStuff(getFooT1Ptr());
} else {
doStuff(getFooT2Ptr());
}

关于c++ - 具有三元运算符和模板的自动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29587972/

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