Я пытаюсь использовать некоторые SFINAE внутри шаблонизированной структуры. Я уменьшил мою проблему к следующему и мог бы сделать эту работу:Недопустимое использование неполного типа (SFINAE)
template<bool mybool>
struct test {
void myfunc();
};
template<bool mybool>
void test<mybool>::myfunc() {
std::cout << "test true" << std::endl;
}
template<>
void test<false>::myfunc() {
std::cout << "test false" << std::endl;
}
int main(int argc, char ** argv) {
test<true> foo;
test<false> bar;
foo.myfunc();
bar.myfunc();
}
С помощью этого кода я получаю результат:
test true
test false
Однако, если я хочу считать, что мой struct test
с более чем один шаблон параметра, я попытался адаптации выше, как это:
template<int myint, bool mybool>
struct test {
void myfunc();
};
template<int myint, bool mybool>
void test<myint,mybool>::myfunc() {
std::cout << "test true" << std::endl;
}
template<int myint>
void test<myint,false>::myfunc() {
//error: invalid use of incomplete type 'struct test<myint, false>'
std::cout << "test false" << std::endl;
}
int main(int argc, char ** argv) {
test<1,true> foo;
test<1,false> bar;
foo.myfunc();
bar.myfunc();
}
Я получаю недопустимое использование неполного типа «структура тест».
Я иду в неправильном направлении? Есть ли способ сделать то, что я хочу сделать? Спасибо за помощь!
вы имели в виду 'foo.myfunc()', когда вы писали 'foo.test()'? – bitmask
Во втором примере вы также неверно произвели 'myfunc'. Это должно быть 'my_func'. Пожалуйста, попробуйте свои примеры перед публикацией их. – pmr