template<typename T>
class Pack
{
private:
std::function<T()> _Func = nullptr;
public:
Pack()
{
}
Pack(std::function<T()> func)
: _Func(func)
{
}
~Pack()
{
}
operator T()
{
return _Func();
}
};
Что я использую operator T
, я хочу назвать _Func
неявно, но я даже не могу сделать это в явном виде. Кажется правильным, но на самом деле ошибка C2440 @MSVC. Я использую его двумя способами:определяемые пользователем C++ тип Ошибка преобразования
статический член класса (преуспел);
член класса (не удалось)
(я не знаю, имеет ли он или нет)
Я действительно интересно, почему она работает в двух направлениях, и что еще более важно, как я могу поместить его в мой класс как нестатический член и успешно вызвать operator T
.
Вам необходимо связать нестационарную функцию с объектом: Возможно [это] (http://stackoverflow.com/questions/7582546/using-generic-stdfunction-objects-with-member-functions-in-one -класс). – namezero
@namezero param - это выражение лямбда, которое фиксирует все ссылки в классе. Это же решение? – PENGUINLIONG
@namezero В чем вопрос? ваш пример отлично работает. –