템플릿에 전달 된 변수 유형을 확인하고 int
또는 std::string
등일 경우에 기반한 함수를 호출하는 방법이 있습니까? 내가 그 코드를 사용하려고하면 예를템플릿 변수 유형에 따라 다른 방법 수행
template <class T>
struct Jam
{
Jam(T *var)
{
if (typeid(var) == typeid(std::string*)
*var = "Hello!";
else if (typeid(var) == typeid(int*)
*var = 25;
}
};
를 들어
, 나는 오류 invalid conversion from const char* to int
를 얻을. 컴파일러가 별도의 함수로 템플릿을 "확장"하고 구조체의 새 인스턴스를 지정할 때 throw Jam<std::string>(&setme);
은 var* = 25
문을 감지하고 컴파일을 거부했기 때문에 이것이 의심 스럽습니다.
적절한 방법이 있습니까? 아마 매크로 경비원이 있겠 니? 감사. 대신 오버로드
예를 들어 생성자 ('template <> Jam :: Jam (int * var) {}'만 템플릿 클래스 정의 외부) 또는 코드 기반을 사용/사용하지 않도록 설정하는 더 복잡한 SFINAE 템플릿 인자에 관해서 ... 나는이 간단한 문제에서는 의미가 없다고 생각하지만,이 단순한 솔루션이 부담이 될 때 말이 될 수 있습니다. (생성자가 100 가지를했는데 그 중 하나만 유형에 의존한다고합시다 또는 100 개의 다른 멤버 함수가 있고 전체 유형을 전문화하는 것이 비쌀 것입니다) –