gpt4 book ai didi

c++ - 如何根据类模板参数专门化成员函数

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

问题是什么。此外,是否可以内联执行此操作?

这里是一个小例子,只是为了提供一个想法......

template<typename T>
class Foo {
public:
Foo() :z(0.0) {}

void do( const Foo<T> &f ) {
z = f.z;
}
// specialize 'do' for Foo<int>, possible inline?

private:
T z;
};

最佳答案

您不需要做任何复杂的事情。只需使用重载和委托(delegate)。请注意,我们不能只添加一个 int 重载,因为当 T 结果也是 int 时,这将是一个无效的重载(两个函数具有相同的签名)

template<typename T>
class Foo {
public:
Foo() :z(0.0) {}

void doIt(const Foo<T> &f ) {
doItImpl(f);
}

private:
template<typename U>
void doItImpl(const Foo<U> &f) {
z = f.z;
}

void doItImpl(const Foo<int> &f) {
/* ... */
}

private:
T z;
};

或者,对于这种情况,您可以通过特化来做到这一点

template<typename T>
class Foo {
public:
Foo() :z(0.0) {}

void doIt(const Foo<T> &f ) {
z = f.z;
}

private:
T z;
};

template<>
inline void Foo<int>::doIt(const Foo<int> &f) {
/* ... */
}

只有在所有模板参数都是固定的情况下,才能以这种方式使用特化。换句话说,部分特化成员函数是不可能的。

关于c++ - 如何根据类模板参数专门化成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3535693/

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