Конвертер функции с возвращаемым типом T в функцию с возвращаемым типом string

300
31 мая 2017, 06:21

Пытался написать функцию, которая делает то, что указано в заголовке:

template<class T>
function<string(int)> conv(function<T(int)> f) {
    return [&](int x) -> string {
        stringstream ss;
        ss << f(x);
        return ss.str();
    };
}

ideone

clang выдает такую ошибку:

prog.cpp:28:3: error: no matching function for call to 'conv'
                conv(f1),
                ^~~~
prog.cpp:17:23: note: candidate template ignored: could not match 'function<type-parameter-0-0 (int)>' against 'int (*)(int)'
function<string(int)> conv(function<T(int)> f) {

Или такое только макросами делается?

Полный код:

#include <iostream>
#include <functional>
#include <sstream>
#include <vector>
using namespace std;
int f1(int x) {
}
string f2(int x) {
}
long long f3(int x) {
}
template<class T>
function<string(int)> conv(function<T(int)> f) {
    return [&](int x) -> string {
        stringstream ss;
        ss << f(x);
        return ss.str();
    };
}
int main() {
    vector<function<string(int)>> funcs = {
        conv(f1),
    };
    return 0;
}
Answer 1

Проблема в том, что у вас аргумент conv не преобразуется автоматически в std::function, вам надо или поменять саму функцию:

template<class T>
function<string(int)> conv(T(*f)(int)) { //меняем сигнатуру
    return [f](int x) -> string { // завхватываем f по значению
        stringstream ss;
        ss << f(x);
        return ss.str();
    };
}

или заворачивать аргумент функции в std::function:

vector<function<string(int)>> funcs = {
    conv(std::function<int(int)>(f1)),
};

Проверка

READ ALSO
Visual Studio 2017 C++ LNK2019 unresolved external symbol

Visual Studio 2017 C++ LNK2019 unresolved external symbol

ЗдравствуйтеИмеется вот такая иерархия:

500
Регулярное выражение в С++

Регулярное выражение в С++

Не могу понять почему не работает следующий кодВ res всегда false

239
Qt C++ layout выходит за пределы TabWidget

Qt C++ layout выходит за пределы TabWidget

Всем приветХочу добиться корректного расположения QToolBox в QTabWidget

395
Не работает javascript в нативном браузере Android

Не работает javascript в нативном браузере Android

Не работает javascript в нативном браузере AndroidПритом проблема не в браузере, потому что на других сайтах js работает

287