바이너리 크기를 줄이기 위해 템플릿 메서드 내에서 일부 코드를 비 템플릿 메서드로 이동하려고합니다.템플릿이 아닌 방법에 인수로 템플릿 매개 변수를 사용할 수 있습니까?
template<TargetType K, typename V = plat_target_handle_t>
class Target
{
.............
..............
};
은 TargetType 아래 그림과 같이 '대상'이라고하는 템플릿 클래스는 열거 데이터 형식이된다.
template<>
template< TargetType T>
std::vector<Target<T> >
Target<TARGET_TYPE_X>::getChildren(const TargetState i_state) const
{
std::vector<Target<T> > l_children;
for (int i=0; i < elements_in_some_list ; ++i)
{
/*If the current entry in some_list match my critera, add to the l_children */
}
}
TargetType은 열거 형 데이터 유형이고 TARGET_TYPE_X는 열거 형 값 중 하나입니다.
저는 모든 로직을 전역 메소드로 선택하도록하고 싶습니다. getChildrenHelper라고 말하면됩니다.
getChildrenHelper는 다음과 같이 선언됩니다.
void getGhildrenHelper(const TargetType i_targetType,
const TargetState i_targetstate,
std::vector<Target<TARGET_TYPE_ALL>> & io_children);
그리고 다음 getChildren 방법은 결국
template<>
template< TargetType T>
std::vector<Target<T> >
Target<TARGET_TYPE_X>::getChildren(const TargetState i_state) const
{
std::vector<Target<T> > l_children;
childHelper(T,i_state,l_children);
return l_children;
}
내 생각과 같을 것이다 내가 함께 일하고 네이티브 컴파일러가 오류를하지 않았지만이, 할 수없는 것입니다.
그러나 유사한 개념이 완벽하게 잘 작동하는 다른 기존의 코드가
template< TargetType K >
inline ReturnCode putParam(const Target<K>& i_target,
const RingID i_ringID,
const RingMode i_ringMode)
{
ReturnCode l_rc = FAPI2_RC_SUCCESS;
// Find the string in the SEEPROM
l_rc = findInImageAndApply(i_target, i_ringID, i_ringMode);
return l_rc;
}
fapi2::ReturnCode findImageAndApply(
const fapi2::Target<fapi2::TARGET_TYPE_ALL>& i_target,
const RingID i_ringID,
const fapi2::RingMode i_ringMode)
{
................
................
}
리팩터링하려는 예제 프로그램은 컴파일되지 않습니다. 'TargetType','TARGET_TYPE_X','TargetState' 및'plat_target_handle_t'의 정의가 없습니다. – user2079303
TargetType과 TargetState는 enum입니다. plat_target_handle_t는 다른 곳에서 정의 된 것과 비슷하게 정교하지 않습니다. –