현재 CLI/C++에서 네이티브 C++ 클래스의 래퍼를 작성하고 있습니다. 나는 지금 약간의 GamePacket
클래스 위에있다. 내 래퍼를 컴파일 할 수 없습니다, 그러나CLI/C++ 함수 오버로드
Packet.Write<Int32>(1234); Packet.Write<byte>(1);
:
public ref class GamePacket
{
public:
GamePacket();
~GamePacket();
generic<typename T>
where T : System::ValueType
void Write(T value)
{
this->bw->Write(value);
}
};
나는 내 래퍼를 사용하여 C#으로 다음과 같은 함수를 호출 할 수있어 것을 원하는 다음 클래스를 고려 . 오류 :
Error 1 error C2664: 'void System::IO::BinaryWriter::Write(System::String ^)' : cannot convert argument 1 from 'T' to 'bool'
나는 System::String^
출처 않습니다이 오류를 이해하지 않습니다. Write()
메서드의 많은 오버로드를보고 있는데, CLI/C++은 올바른 메서드를 호출하지 않습니다. 그렇다면 어떻게하면 올바른 메서드를 호출 할 수 있습니까?
참조 MSDN은 : http://msdn.microsoft.com/en-us/library/system.io.binarywriter.write(v=vs.110).aspx
빠른 답변 주셔서 감사합니다! 제네릭을 사용할 수없고 다음과 같은 것을 넣을 수는 없나요? if (value-> GetType() == __typeof (float)) {this-> bw-> Write ((float) value); }'(올바른 구문을 모르겠습니다)? – hresult
@hresult : 당신은 할 수 있겠지만, 다중 오버로드만큼이나 많은 작업이며, 타입 검사를 잃어 버린다. (인자 타입이리스트에 없다면, 런타임까지 알지 못할 것이다.) 구문은'if T :: typeid == float :: typeid)' –