Я задавался вопросом, есть ли какие-либо преимущества объявления функций шаблонов из строки vs в классе.
Я пытаюсь получить четкое представление о плюсах и минусах двух синтаксисов.
Вот пример:
Вне строки:
template<typename T>
struct MyType {
template<typename... Args>
void test(Args...) const;
};
template<typename T>
template<typename... Args>
void MyType<T>::test(Args... args) const {
// do things
}
Vs в классе:
template<typename T>
struct MyType {
template<typename... Args>
void test(Args... args) const {
// do things
}
};
Существуют ли языковые функции, которые проще использовать с первой или второй версией? Будет ли первая версия мешаться при использовании аргументов шаблона по умолчанию или enable_if? Я хотел бы увидеть сравнение того, как эти два случая играют с различными языковыми функциями, такими как sfinae, и, возможно, с потенциальными будущими функциями (модули?).
Учет специфического поведения компилятора также может быть интересным. Я думаю, что MSVC нуждается в inline
в некоторых местах с первым фрагментом кода, но я не уверен.
EDIT: Я знаю, что нет никакой разницы в том, как эти функции работают, что это в основном вопрос вкуса. Я хочу видеть, как оба синтаксиса играют с разными приемами, и преимущество одного над другим. Я вижу в основном ответы, которые поддерживают друг друга, но я действительно хочу получить обе стороны. Более объективный ответ был бы лучше.