Visual C ++ 2013에서 템플릿 함수 템플릿을 사용하는 것은 유효하지 않습니다. 먼저 템플릿 함수 포인터 (T에서 문자열로 변환하는 데 사용됨)를 정의했습니다.
template<class T>
struct TemplateFn
{
typedef string(*T2STRING)(T);
};
그리고 다른 템플릿 함수를 정의했습니다.
template<class T>
vector<string> Vector2StringVector(vector<T> a_vt, TemplateFn<T>::T2STRING a_fn)
{
auto vtString = vector<string>();
for (auto i = a_vt.begin(); i != a_vt.end(); i++)
{
vtString.push_back(a_fn(*i));
}
return vtString;
}
그리고 컴파일러는 오류를 출력합니다. C2061 SYNTAX ERROR : IDENTIFIER 'T2STRING'마지막으로 코드를 아래와 같이 변경합니다.
template<class T>
vector<string> Vector2StringVector(vector<T> a_vt, string(*T2STRING)(T))
{
auto vtString = vector<string>();
for (auto i = a_vt.begin(); i != a_vt.end(); i++)
{
vtString.push_back(T2STRING(*i));
}
return vtString;
}
그리고 괜찮습니다. 그래서 그것은 나에게 너무 연결되어 있습니다. TemplateFn :: T2STRING과 같은 방식으로 사용하는 우아한 방법이 있습니까? 감사
T2STRING은 종속 중첩 유형이므로 컴파일러에 힌트를 제공해야합니다. 함수 헤더를 다음으로 변경하십시오.
vector<string> Vector2StringVector(vector<T> a_vt, typename TemplateFn<T>::T2STRING a_fn)
BTW, std::transform
(추가로 std::back_inserter
) 다시 구현하려고하지 않습니까?
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다