gpt4 book ai didi

c++ - 派生类中的函数模板特化

转载 作者:可可西里 更新时间:2023-11-01 15:23:49 26 4
gpt4 key购买 nike

我有一个带有函数模板的基类。

我从基类派生并尝试对派生类中的函数模板进行特化

我做了这样的事情。

class Base 
{
..
template <typename T>
fun (T arg) { ... }

};

class Derived : public Base
{
...
} ;

template <>
Derived::fun(int arg);

在 .cpp 文件中,我提供了模板特化的实现。

这适用于 MSVC 8.0 和 g++-4.4.2 提示派生类中缺少函数声明乐趣。

我不知道哪个编译器的行为是正确的。非常感谢这方面的任何帮助。

提前致谢,苏里亚

最佳答案

您需要在 Derived 中声明该函数以便能够重载它:

class Derived : public Base
{
template <typename T>
void fun (T arg)
{
Base::fun<T>(arg);
}

} ;

template <>
void Derived::fun<int>(int arg)
{
// ...
}

请注意,您可能需要内联特化或将其移动到实现文件中,在这种情况下,您必须将头文件中的特化原型(prototype)化为:

template <>
void Derived::fun<int>(int arg);

否则,编译器将在调用时使用“fun”的通用版本生成代码,而不是链接到特化版本。

关于c++ - 派生类中的函数模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1928169/

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