내가이 말을하자 다른 결과를 가져옵니다 (이 클래스는 OK입니다)C++ 원시 또는 스마트 포인터 템플릿 함수 생성
class CCheckSystemEndianess
{
private:
int i;
char checker[sizeof(int)];
public:
CCheckSystemEndianess() : i(1) { }
bool isLittleEndian() { return (checker[0] != 0); }
};
하지만이 사람은 주요 문제가 있다는 것입니다
template <bool checker>
class CEndian
{
private:
template <typename T>
T swapEndianess (const T& value)
{
if (CCheckSystemEndianess().isLittleEndian() == checker)
{
return value;
}
.................
이상한 역할 CEndian을 여러 가지 방법으로 만들면 CCheckSystemEndianess()를 사용하여 다른 결과를 얻습니다. isLittleEndian()
예 :
CEndian<false> *p_endian = new CEndian<false>();
다음이 라인은
CcheckSystemEndianess().isLittleEndian() = false
된다하지만이
std::unique_ptr<CEndian<false> > p_endian (new Cendian<false>());
같은 CEndian를 만드는 경우 다음이 라인은 CcheckSystemEndianess()가된다. isLittleEndian()가 true =.
내가 CCheckSystemEndianes을 작성하는 경우 예 CEndian 클래스의 모든 간다 내부 확인을
template <typename T>
T swapEndianess (const T& value)
{
std::unique_ptr<CCheckSystemEndianess> endianCheck(newCCheckSystemEndianess);
checkSystemEndianess(). isLittleEndian() 스마트와 원시 포인터가 사실 ....
내가 도착과 함께 두 가지 거기에 조금 혼란스러워.
편집 : CCheckSystemEndianess는 클래스가 아닌 조합이어야한다는 Cubbi에게 감사드립니다.
사실 예. 나는 노동 조합에 대해 생각하고 있었지만 수업을 만들었습니다. – legion
당신은 그것도 생성자와 노동 조합을 만들 수 있습니다 ... – dascandy