[英]std::is_base_of for a ctor compiling error
已編輯
我有以下內容:
#include <iostream>
#include <vector>
#include <type_traits>
class IListableItem {};
class SubIListableItem : public IListableItem {};
class Base{};
template<class T> struct is_listable_item : public std::false_type {};
template<class T> struct is_listable_item<std::is_base_of<IListableItem, T>> : public std::true_type {};
template<class T, std::enable_if_t<is_listable_item<T>::value, bool> = true>
class ImplementationOfBase : public Base
{
public:
explicit ImplementationOfBase(const std::vector<T> &items): Base(){}
virtual ~ImplementationOfBase(){}
protected:
std::vector<std::wstring> getLabels(const std::vector<T> &source)
{
std::vector<std::wstring> ret;
for (auto &i : source) ret.emplace_back(i.label);
return ret;
}
};
class Page : public ImplementationOfBase<SubIListableItem> {};
int main ()
{
}
它返回給我:
prog.cc:34:58: error: no type named 'type' in 'struct std::enable_if<false, bool>'
34 | class Page : public ImplementationOfBase<SubIListableItem> {};
| ^
在這種情況下我不能使用指針有什么線索嗎?
現場示例: https://wandbox.org/permlink/ESviQ0qHrjLPX9wE
謝謝。
您可以按如下方式更改is_listable_item
的定義:
template<class T> struct is_listable_item : public std::is_base_of<IListableItem, T> {};
您的代碼不起作用,因為is_listable_item
已專門用於std::is_base_of<IListableItem, T>
但您正在傳遞SubIListableItem
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.