実際の機能bar
は、データが正確に4バイトまたは8つのバイトに書き込まれるファイル、(unsigned int
からDWORD
又はDWORD64
)から読み出すことになっているオーバーロードテンプレート関数は
void bar(DWORD64&);
void bar(DWORD&);
template<typename IntType>
void foo(IntType& out)
{
bar(out);
}
int main()
{
int a;
foo(a); // Caller doesn't care
}
呼び出し側は、任意の整数型(int
、LONG
、DWORD
、LONGLONG
または何か)を渡すことができるので - 私は技術を必要foo
32ビットbar
または64ビットbar
に電話をかけることができるようになっています。要するに
、それは次のように次のようになります。
明らかtemplate<typename IntType>
void foo(IntType& out)
{
if(sizeof(out)==sizeof(DWORD)) // 32-bit
{
DWORD data;
bar(data); // call DWORD version
out = (IntType)data; // Ignore truncation etc.
}
else
{
DWORD64 data;
bar(data); // call DWORD64 version
out = (IntType)data; // Ignore truncation etc.
}
}
、私はコンパイル時に解決される「場合」の部分をしたいです。 std::enable_if
または何か?
代わりに*専門化*を使用してください。 –
あなたはsfinaeを考えましたか? –
@ W.F。はい、私はSFINAEを考えましたが、動作させることはできません。 – Ajay