下面是代碼示例:std ::函數簽名指針vs指針引用=沒有區別?
#include <string>
#include <functional>
struct Foo {};
typedef bool func_type(Foo *&, const std::string&);
typedef std::function<bool(Foo*&, const std::string&)> FunctionalType;
bool f(Foo *, const std::string&)
{
}
int main()
{
#if 1
func_type *func;
func = f;
#else
FunctionalType f2;
f2 = f;
#endif
}
正如你看到的,我已經聲明函數類型與「參考指針」作爲第一個參數Foo *&
,我希望這個函數只有「指針」作爲第一個參數Foo *
不能被分配給這種類型的變量。
#if 1
區域無法編譯(如我所料);然而,替代沒有發出任何錯誤:
FunctionalType f2;
f2 = f;
爲什麼它編譯沒有錯誤(至少GCC 5.2和3.7譁)?
如何修復,以便
std::function<Params>
不接受f
進行轉換?
我將另一個答案標記爲答案,因爲它爲(2)提供了一些解決方法。 – fghj