我有以下課程:
template <typename T, typename U = UDefault>
class A;
如何檢查型別是否A<float>是A<float, int>上述模板類的實體?
我嘗試修改如何檢查物件是否是 C 中模板類的實體?進入:
template <typename T, typename U>
struct IsA : std::false_type
{};
template <typename T, typename U>
struct IsA<A<T, U>> : std::true_type
{};
但它給出了以下錯誤
20:18: error: wrong number of template arguments (1, should be 2)
16:8: error: provided for 'template<class T, class U> struct IsA'
In function 'int main()':
40:34: error: wrong number of template arguments (1, should be 2)
16:8: error: provided for 'template<class T, class U> struct IsA'
如何解決?
uj5u.com熱心網友回復:
你的IsA類應該接受一個模板引數。您正在測驗的型別。
template <typename Type>
struct IsA : std::false_type {};
template <typename T, typename U>
struct IsA< A<T,U> > : std::true_type {};
// ^^^^^^ The specialization of your one template argument.
或者換一種說法,因為 A 的各個模板引數在這里無關緊要:
template <typename ...AParams>
struct IsA< A<AParams...> > : std::true_type {};
// ^^^^^^^^^^^^^ The specialization of your one template argument.
在編譯器資源管理器中查看它的作業原理
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/478097.html
