2
다음은 단순화 된 문제입니다.인스턴스화 오류 후 특수화를 피하는 방법은 무엇입니까?
Outer::Inner
에 대한
template <class T>
std::string name(const T&); // This is the template
// I want to explicitly specialize.
class Outer
{
class Inner
{
};
class Container : public ::Container<Inner> // This causes also an implicit
// specialization of f::name
{
};
};
내가 전문 어떻게
template <class T>
std::string name(const T&);
?
template <class T>
std::string name(const T&);
// 1. Here I cannot forward declare a nested class
class Outer
{
class Inner
{
};
// 2. Here I get error: explicit specialization
// in non-namespace scope 'class Outer'
class Container : public ::Container<Inner>
{
};
};
// 3. Here I get error: specialization of '...' after instantiation
가 어떻게이 문제를 해결할 수 :
은 내가 생각 세 곳에서 명시 적으로 전문화를 선언 할 수 없습니다?
감사합니다! 이제 나는 그것을보고 나는 내가 생각했던 것에 놀랐다. 과부하 일뿐입니다. 나는 또한 기사를 볼 것이다! –
한 가지 더. 어디에서 과부하를 선언합니까? 문제가 남아있는 것 같습니다. 템플릿 케이스와 같은 이유로 장소가 없습니다. –
다른 곳에서와 마찬가지로 필요할 때마다 선언하고 .cpp에서 정의 할 수 있습니다. .h와 .cpp 파일을 여러 곳에서 필요로한다면 이것을 전용으로 사용할 수 있습니다 ('inline'을 사용하여 정의를 .h에 넣을 수도 있습니다) – juanchopanza