これは私がやりたいことの擬似コードです。
template<typename T>
struct ConvertToT
{
static_assert(false, "Explicit specialization for T required.");
// Variant will be coerced to this type before calling Convert.
std::uint32_t GetVariantType()
{
return VT_EMPTY;
}
T Convert(CComVariant& input)
{
return "ERROR!";
}
};
template<>
struct ConvertToT<std::wstring>
{
std::uint32_t GetVariantType()
{
return VT_BSTR;
}
T Convert(CComVariant& input)
{
return std::wstring(input.bstrVal, ::SysStringLen(input.bstrVal));
}
};
/* repeat for several more explicit specializations:
* template<>
* struct ConvertToT<...>
* {
* std::uint32_t GetVariantType()
* {
* return ...;
* }
* ... Convert(CComVariant& input)
* {
* return ...;
* }
* };
*/
プライマリ テンプレートを無効にして、明示的な特殊化の使用を要求する方法はありますか?