저는 템플릿이 아닌 클래스에서 템플릿 메서드를 전문화하려고합니다. 메서드의 반환 형식에 템플릿 기반 형식이 포함되어 있습니다.이 메서드는 인수를 사용하지 않습니다. 나는 주위를 돌아 다니고 시행 착오를 거치지 않고 컴파일하는 일을 아무 소용이 없도록하려고 노력했다.템플릿이없는 클래스에서 매개 변수없이 템플릿 메서드를 어떻게 특화합니까?
이 코드를 빌드하려면 어떻게해야합니까? 그러한 구문은 가능한가? (아래 코멘트에 표시된대로 내가 전문적으로 노력하고있어 템플릿 방법은 cBar::getFoos
입니다.)
박탈 다운 예제 코드 :
#include <vector>
////////////////////////////////////////////////////////////////////////////////
// the non-templated class below contains std::vector objects of these types
// (tBuiltInType is an int, float, or bool - but hopefully that's not an
// assumption that needs to be made, as I'd like to include more complex types)
template< typename tBuiltInType >
class cFoo
{
public:
// ...
void doSomething()
{
// ... (unimportant what happens here, but stuff happens)
}
private:
std::vector<tBuiltInType> m_objects;
};
////////////////////////////////////////////////////////////////////////////////
// this contains the templated method I'm trying to specialize - getFoos
class cBar
{
public:
// ...
// this is the method I'm trying to specialize by contained type (see private area)
// getFoos<int>() would return m_intFoos, etc.
template< typename tBuiltInType >
std::vector< cFoo<tBuiltInType> > &getFoos();
// (probably unimportant) example use
template< typename tBuiltInType >
void doSomething()
{
for (cFoo<tBuiltInType> &foo : getFoos<tBuiltInType>())
foo.doSomething();
}
private:
std::vector< cFoo<int> > m_intFoos;
std::vector< cFoo<bool> > m_boolFoos;
std::vector< cFoo<float> > m_floatFoos;
};
////////////////////////////////////////////////////////////////////////////////
// some (also probably unimportant) example usage code
int main()
{
cBar bar;
bar.doSomething<int>();
bar.doSomething<bool>();
bar.doSomething<float>();
return 0;
}
(나는 내 가족을 방문하고 어떤 노트북이없는거야 , 그래서 내 일반적인 dev에 설치 프로그램을 사용할 수 없습니다 - 내가 대신 노력하고있어 온라인 컴파일러에서 시도에서 오류를 게시 할 수 있지만 많은 사람들이 난해한 온라인 컴파일러 오류를 볼 수 있기 때문에 그것은 여기에 좋은 일을 의심하고 무엇을 알고 그로부터해라. 그러면 약간의 질문 텍스트를 압축하기 위해 그 비트를 건너 뛰겠다.)
http://stackoverflow.com/questions/27582408/let-a- (이 [관련 질문] 참조 function-return-any-type-in-c-class) (최소한 [대답] (http://stackoverflow.com/a/27583037/1413395)). –
그럴 수도 있지만 앞으로 더 복잡한 유형을 추가하고 싶습니다. 그래도 고마워! – counterfeitname
_ "미래에 좀 더 복잡한 유형을 추가하고 싶습니다."_ 우리는 열거를 확장하고 매크로와 코드를 검증하는 유형의 복잡성을 추가하기 위해 몇 가지 특별한 전 처리기 매크로를 사용하여이를 해결했습니다. 컴파일 할 때. –