Рассмотрим следующий класс:
template <typename classTypeT>
class myClass {
public:
using FunctionType1 = std::function<void(classTypeT &, const std::string*)>;
using FunctionType2 = std::function<void(classTypeT &, const int)>;
using FunctionVariantType = boost::variant<FunctionType1, FunctionType2>;
std::vector<FunctionVariantType> myVariants;
myClass(const std::vector<FunctionVariantType> myVec) {
myVariants = myVec;
}
};
И создание экземпляра этого класса:
auto vec = std::vector<myClass<SomeOtherClass>::FunctionVariantType>({&SomeOtherClass::someFunc});
auto classInstance = myClass<SomeOtherClass>(vec);
Этот код работает и делает то, что я хочу, но я бы очень хотел Избегайте необходимости указывать тип шаблона в векторе. IE, я хочу быть в состоянии сделать это:
auto vec = std::vector({&SomeOtherClass::someFunc});
auto classInstance = myClass<SomeOtherClass>(vec); // Error
И у меня есть шаблонное отклонение, но я получаю ошибку, подобную этой:
cannot convert argument 1 from 'std::vector<void (__cdecl myClass::* )(const std::string *),std::allocator<_Ty>>' to 'const std::vector<mwboost::variant<std::function<void (classTypeT &,const std::string *)>,std::function<void (classTypeT &, const int)>>,std::allocator<_Ty>> &'
Похоже, что может неявно приведение типа функции к варианту этого типа функции? Кажется, это работает лучше без вектора, но разве я не смогу это сделать?
Спасибо,
Райан