항상 적절한 형식의 0을 반환하는 zero() 템플릿 함수를 작성하려고합니다. 이것은 기본 유형에 대해서는 사소한 것이지만 사용자 정의 유형 (자체 과부하를 제공 할 수 있음)에 대해 유사한 동작을 원합니다.적절한 형식의 "0"을 반환하는 C++ 함수
template <typename T>
T zero() {
return T{}*0; // Clearly not correct for all types, but known incorrect cases should be specialized
}
template <>
int zero<int>() { return 1; } // intentionally wrong for testing
하지만 전문성을 나타내는
cout << zero<int>() << endl;
출력 0을 호출 호출되지 않는 예를
auto i = zero<int>() // i is an in
auto d = zero<double>() // d is a double
auto m = zero<Matrix2d>() // m is a Matrix2d with all elements initialized to zero.
를 들어 내가있는 것은 이것이다. 내가 도대체 뭘 잘못하고있는 겁니까?
* 참고 :. 사용 케이스 :: 축적 수 std하지만, 시작 값은 항상 0입니다 상상과 유사하며 우리가 그것을 전달하는 사용자를 필요로하지 않으
UPDATE 로 몇 명의 주석가들이 지적했는데, 이것은 Ideone에서 작동합니다. 내 특정 구현에 대한 무언가가 그것을 깨고있다. 내가 가진 :
zero.h :
template <typename T>
constexpr T zero() {
return T{}*0;
}
zero.cpp :
#include "zero.h"
template <>
constexpr int zero<int>() { return 1; }
MAIN.CPP :
#include <iostream>
#include "zero.h"
using namespace std;
int main(int argc, char **argv) {
cout << "int: " << zero<int>() << endl;
}
[값 초기화] (http://en.cppreference.com/w/cpp/language/value_initialization)라는 바퀴를 재발 명하려고합니다. 귀하의 클래스에 대한 기본 생성자를 만들고 그것을 완료하십시오. –
왜 변수 템플릿을 사용하지 않습니까? '템플릿 constexpr T 영점 = T {};' –
[재생할 수 없음] (http://ideone.com/T4al10) – user463035818