gpt4 book ai didi

c++ - 具有专门用于 C++ 的单一方法的模板类

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

我只有一个 hpp 文件用于 C++ 的学校作业(我不允许添加 cpp 文件,声明和实现都应该写在文件中)。

我在里面写了这段代码:

template<class T>
class Matrix
{
void foo()
{
//do something for a T variable.
}
};

我想再添加一个foo方法,但是这个 foo()将专门用于 <int> .我在一些地方读到我需要声明一个新的特化类(class)才能工作。但我想要的是专门的 foo将位于原始 foo 的正下方,所以它看起来像这样:

template<class T>
class Matrix
{
void foo(T x)
{
//do something for a T variable.
}
template<> void foo<int>(int x)
{
//do something for an int variable.
}
};
  • 为什么我会收到此语法错误(“'<' 标记前的预期非限定 ID”)?
  • 为什么这不可能?
  • 如何在不声明新的专门类的情况下解决这个问题?

谢谢

最佳答案

foo不是模板。它是模板的成员函数。因此 foo<int>是没有意义的。 (此外,必须在命名空间范围内声明显式特化。)

您可以显式特化类模板的特定隐式实例化的成员函数:

template<class T>
class Matrix
{
void foo(T x)
{
//do something for a T variable.
}
};

// must mark this inline to avoid ODR violations
// when it's defined in a header
template<> inline void Matrix<int>::foo(int x)
{
//do something for an int variable.
}

关于c++ - 具有专门用于 C++ 的单一方法的模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25724360/

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