次のようにテンプレート メソッドを特殊化しようとしています。
template <typename X, typename Y>
class A {
public:
void run(){};
};
template<typename Y>
void A<int, Y>::run() {}
でもわかります
main.cpp:70:17: error: nested name specifier 'A<int, Y>::' for declaration does not refer into a class, class template or class template partial specialization
特定の Y を使用して特殊化をインスタンス化していないため、特殊化がまだ完了していないことは理解していますが、どうすればよいですか?
1
関数定義を使用してクラス自体を部分的に特殊化する必要があります。
– モスクワ出身のヴラド
2020 年 9 月 4 日 21:33
----------------------------------
最初に、関数宣言を含むクラス自体を部分的に特殊化する必要があります。その後、その定義を書くことができます。関数を部分的に特殊化することはできません。
たとえば
#include <iostream>
template <typename X, typename Y>
class A {
public:
void run()
{
std::cout << "How do you do?\n";
};
};
template<typename Y>
class A<int, Y>
{
public:
void run();
};
template<typename Y>
void A<int, Y>::run()
{
std::cout << "Hello World!\n";
}
int main()
{
A<int, int>().run();
A<double, int>().run();
return 0;
}
プログラムの出力。
Hello World!
How do you do?
2
クラス A がかなり大きく、そのメソッドをオーバーライドしたいだけの場合はどうすればよいでしょうか?
– ペレンシア
2020 年 9 月 4 日 21:55
@perencia 関数を部分的に特殊化することはできません。
– モスクワ出身のヴラド
2020 年 9 月 4 日 21:58