Как напечатать несколько переменных разного типа на консоль в C ++ - PullRequest
2 голосов
/ 08 ноября 2019

Я новичок в C ++, после нескольких минут кодирования я устал от ручного ввода "std: cout <<" print нечто "<< std: endl;"поэтому я решил создать функцию с именем printL, чтобы упростить печать на консоль, после нескольких часов и нескольких оптимизаций у меня появился шаблон, и я попытался создать шаблон с переменным числом, но я не могу понять, что не так с моим кодом </p>

template < typename T > void printL(T t){
    std::cout << t << std::endl;
}

template < typename T, typename ...F > void printL(T t, F ...f) {

    std::cout << t << printL(f...) << std::flush;
}

int main() {
    printL("the quick brown fox jumps over the lazy dog ", "dog");

    return 0;

он должен вывести это:

the quick brown fox jumps over the lazy dog dog

код должен принимать ряд параметров, которые неизвестны, а типы также неизвестны. и он должен напечатать их в одну строку и завершить функцию печати новой строкой.

Ответы [ 2 ]

4 голосов
/ 08 ноября 2019

С C ++ 17 сложить выражения , это еще проще

template <typename... T> void printL(T... t) {
    (std::cout << ... << t) << std::endl;
}
4 голосов
/ 08 ноября 2019

Ваша функция определена как возвращающая void, поэтому ваш код не будет работать. Вместо этого просто напечатайте первый аргумент, а затем сделайте рекурсивный вызов, чтобы напечатать остальное.

std::cout << t;
printL(f...);

Ваша завершающая реализация использует std::endl, и это уже сбрасывается.

...