2015-03-14 5 views
1

Я хочу сделать что-то вроде этой игрушкой программы:Назначить шаблон функции для повышения :: функции

#include <boost/function.hpp> 
#include <iostream> 

template <typename T> 
void func1(T& g) { 
    std::cout << 1; 
} 

template <typename T> 
void func2(T& g) { 
    std::cout << 2; 
} 

int main() { 
    boost::function<void(int)> f; 
    int k; 
    std::cin >> k; 
    if (k == 1) 
     f = func1 <int> ; 
    else 
     f = func2 <int> ; 
} 

Но этот код не работает, и он говорит, что «оператор =» не ясно. Есть ли какие-нибудь методы, которые я могу сделать примерно так?

+0

Пожалуйста, сообщите точную ошибку. Я [не могу воспроизвести его] (http://coliru.stacked-crooked.com/a/3f6ca5d62f89e4b6) на Coliru. – chris

+0

Извините, это ошибка C2593 «operator =» неоднозначна –

ответ

0

Изменить это:

boost::function<void(int)> f; 

к этому:

boost::function<void(int&)> f; 

Так что он соответствует вашим функциям.


В других новостях, стандарт C++ 11 приняты по существу boost::function в std::function, с заголовком <functional>.

+0

О, извините, в исходном коде у него есть «&» позади имени класса ... И измените его, так как ваш ответ по-прежнему получает ту же ошибку в VS 2013 ... –

+0

@XiaofanNiu: Исправление в этом ответе отвечает на ваш вопрос. Пожалуйста, не указывайте готовый код в вопросе: скопируйте и вставьте код. Видимо, у вас теперь есть второй вопрос. Опубликуйте это отдельно. Обязательно включите ** полный, но минимальный пример **, который читатели могут попробовать, и обязательно скопируйте и вставьте этот код. –

Смежные вопросы