gpt4 book ai didi

返回类型的 C++11 方法模板特化

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:53:16 25 4
gpt4 key购买 nike

我有以下类(class):

class Foo {
public:
template <typename T>
T bar() {
cout << "Called with return type: " << typeid(T).name() << endl;

T t = //... (some implementation here)

return t;
}
}

它的调用方式如下:

Foo foo;
int i = foo.bar<int>();
long l = foo.bar<long>();

现在我想对使用 shared_ptr<T> 调用函数的情况进行不同的专门化处理

Foo foo;
foo.bar<shared_ptr<int>>();
foo.bar<shared_ptr<long>>();

但我当然不想为每种类型创建完全特化。是否有可能实现此类行为(如果需要,可以基于特征)?

最佳答案

您不能部分特化函数。有关原因的故事,请查看此 GOTW .

虽然您可以部分特化类,所以您可以做的是:

template <typename T>
T bar() {
return bar_impl<T>::apply(this);
}

地点:

template <typename T>
struct bar_impl {
static T apply(Foo* ) {
// whatever
}
}

template <typename T>
struct bar_impl<std::shared_ptr<T>> {
static std::shared_ptr<T> apply(Foo* ) {
// whatever else
}
}

关于返回类型的 C++11 方法模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26915718/

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