當T
是double(float)const
當我嘗試使用function<T>
時出現此錯誤。trait從成員函數類型中刪除const?
implicit instantiation of undefined template 'std::function<double (float) const>'
但它的確定,當T
是double(float)
。我試圖使用std:: remove_cv<T>::type
刪除這const
,但這是行不通的。是的,我有#include<functional>
。
所以我的主要問題是:如何解決這個問題,並刪除const
,以便我可以把這個函數類型放入std:: function
。
我碰到這個問題與lambda表達式的operator()
方法工作的時候,但我認爲這個問題一般是有關的任何方法類型,而不是隻爲lambda表達式
但我的第二個問題是: double(float)const
甚至意味着什麼?我可以理解
double (ClassName::) (float) const
因爲這意味着成員函數不能修改其ClassName
對象。當我將這種類型放入模板中去除類別類型時,我得到了導致問題的double(float)const
。
template<typename>
struct DropClassType;
template<typename Sig, typename C>
struct DropClassType<Sig (C::*)> {
typedef Sig type_without_class;
};
(鐺3.4.2從克將錯誤++ - 4.9.1更隱蔽,但基本上是相同的)
酷。所以它並不意味着任何「獨立」的東西,但是當你重新關聯一個類時,它就會變得有意義,就像你給出的兩個例子一樣。有沒有一個標準的特徵去除const? – 2014-09-03 22:00:16
@AaronMcDaid我不知道任何。這是足夠模糊的,我懷疑任何人想寫它的特質。 – 2014-09-03 22:01:28
我認爲這將不會因爲lambdas而變得模糊。這使我可以編寫一個函數,它將使用任何(非泛型)lambda或類似對象,並自動將其轉換爲一個'std :: function'對象。簡單地在lambda上運行'decltype(&T :: operator())'會返回一個類型,但需要從該類型中移除類型和這個奇怪的'const'。謝謝! – 2014-09-03 22:27:04