Шаблонная функция C ++ с использованием ключевого слова using и пакета параметров - PullRequest
0 голосов
/ 27 июня 2018
// I have an alias like this 
template<typename ... Args>
using msg_formatter = string(const string&, const Args &... );

// and it is returned by a class like this
class logger{
public:
msg_formatter* formatter() const;
};

// then somewhere else I wanna be able to call this
logger log;
log.formatter()("my text: %d", 123);

Однако, похоже, это не работает, понимаешь? Большое спасибо.

1 Ответ

0 голосов
/ 27 июня 2018

Поскольку msg_formatter является шаблоном, аргументы шаблона должны быть предоставлены в возвращаемом типе, но, поскольку вы не знаете тип, который будет передан, вам необходим другой уровень косвенности. Если у вас есть C ++ 14, вы можете вернуть лямбду из функции, используя auto вычет типа возврата:

auto formatter() {
  return [](const string&, auto const&...) {/*...*/};
}

Если у вас operator() и вернуть ее вместо этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...