Как зарегистрировать перегруженную функцию-член шаблона в ChaiScript?

У меня есть следующий класс определения:

class MyType {
public:
template <typename T>
MyType& put(const std::string& s, T&& val);

template <typename T>
MyType& put(size_t pos, T&& val);

template <typename M, typename T, typename = std::enable_if_t<std::is_same<MyType, std::decay_t<M>>::value>>
MyType& put(const M& o, T&& val);
}

Как правильно зарегистрировать перегруженные функции-члены шаблона? MyType::put в ChaiScript v6.0.0?

Я пытаюсь специализированный шаблон значения (обсуждено в: http://discourse.chaiscript.com/t/issues-with-adding-templated-and-or-overloaded-operators/19/3):

chai.add(chaiscript::fun(static_cast<MyType& (MyType::*)(const std::string&, uint64_t)>(&MyType::put<uint64_t>), "put");

Но не компилировать, потому что там несколько функций-кандидатов.

0

Решение

Вы написали:

static_cast<MyType& (MyType::*)(const std::string&, uint64_t)>(
&MyType::put<uint64_t>)

Но если вы посмотрите на свою первую функцию-член, ее подпись:

template <typename T>
MyType& put(const std::string& s, T&& val);

Если T является uint64_tто второй аргумент не uint64_t, Это uint64_t&&, Следовательно, то, что вы хотите, это:

static_cast<MyType& (MyType::*)(const std::string&, uint64_t&&)>(
&MyType::put<uint64_t>)
//                                                  ~~~~~~~~~~~
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]