Повторяющийся вопрос о this.Функция шаблона члена Int внутри класса шаблона
У меня есть класс, как это:
template <class T>
class foo {
public:
foo(){}
template <int S>
void bar(){}
}
Если этот класс вызывается с:
int main(){
foo<float> m;
m.bar<1>();
}
Это дает ошибку:
error: expected primary-expression before ')' token
устаревшее снова:
Мой код:
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MAIN
#include <boost/mpl/list.hpp>
#include <boost/test/unit_test.hpp>
#include <boost/test/test_case_template.hpp>
using namespace boost::unit_test;
#include "foo.hpp"
BOOST_AUTO_TEST_SUITE();
typedef boost::mpl::list<char, int> test_types;
BOOST_AUTO_TEST_CASE_TEMPLATE(test_Mat_constructor_hwd, T, test_types){
foo<T> m;
m.bar<1>();
}
BOOST_AUTO_TEST_SUITE_END()
Это, однако, не компилируется как BOOST_AUTO_TEST_CASE_TEMPLATE делает что-то странное ...
После текста осуждается:
Однако, когда я вызываю функцию с:
foo f;
f.bar<1>();
Я получаю сообщение об ошибке:
A bound member function may only be called
Если я, однако, повернул функцию бара в нечто вроде void bar1() {return bar < 1>();}, это сработает. Я знаю, если T не известно во время компиляции, он не будет компилироваться. Но я не знаю, почему компилятор недостаточно умен, чтобы понять, что 1 в f.bar < 1> является статическим?
спасибо!
Я думаю, что вы, возможно, пропустили часть сообщения об ошибке - что не имеет никакого смысла. –
Пожалуйста, уменьшите свою неудачную программу до кратчайшей ** ** программы **, которая все еще не работает. Вы можете обнаружить свое решение в этом процессе. Если нет, сообщите, что ** короткий ** (подсказка: оно должно быть менее 20 строк), ** полная ** (мы должны попытаться скомпилировать ее) в вашем вопросе. Для получения дополнительной информации см. Http: //sscce.org/. –
возможный дубликат [член-функции шаблона C++ класса шаблона, вызванного из функции шаблона] (http://stackoverflow.com/questions/1840253/c-template-member-function-of-template-class-called-from-template- функция) –