그것은이다.
template<typename DATA_TYPE>
void Push(const typename std::remove_pointer<DATA_TYPE>::type& newValue)
{
//do stuff
}
template<typename DATA_TYPE>
void Push(const DATA_TYPE *newValue)
{
//do stuff
}
Nothe 그러나 그 서 템플릿은 일반적으로 const T&
잡아 모든 호출의 원인이됩니다 다른 템플릿 오버로드와 함께 const T&
일치하는, 그래서 당신은 일을 이런 식으로 일을 피해야한다 : 내가 쓰는 것이 내 머리의 상단에서 - std::remove_pointer
described here를 사용해보십시오 .
편집 : 그것은 조금 더 복잡합니다
내 앞의 코드가 정확하지 :
예상하고 적절한 CONST을 사용하도록 호출자를 강제하지 않는 한이 작동
#include <iostream>
#include <type_traits>
template<typename DATA_TYPE, bool is_pointer>
struct helper;
template<typename DATA_TYPE>
struct helper<DATA_TYPE, true>{
static void f(const typename std::remove_pointer<DATA_TYPE>::type*){
std::cout << "Pointer" << std::endl;
}
};
template<typename DATA_TYPE>
struct helper<DATA_TYPE, false>{
static void f(const DATA_TYPE&){
std::cout << "Non-pointer" << std::endl;
}
};
template<typename DATA_TYPE>
void Push(const DATA_TYPE& newValue)
{
helper<DATA_TYPE, std::is_pointer<DATA_TYPE>::value >::f(newValue);
}
int main()
{
int i=0;
Push(i);
Push(&i);
return 0;
}
--ness, 나는 그것이 이전 솔루션만큼 매력적이지 않다는 것을 인정하지만)
http://channel9.msdn.com/Series/C9-Lectures-Stephan-T-Lavavej-Core-C-/에서 살펴보십시오. Stephan-T-Lavavej-Core-Cpp-3-n은 모든 것이 잘 설명되어 있습니다. –