Я пытаюсь избежать концепций на мастер ветви моих проектов, так что мне нужно какое-то альтернатива с type_trait
:Перегрузка члены от шаблонного класса на логическом значении
Мне нужен класс, который несколько несколько функций изменятся в зависимости от значения bool
.
Кто-то уже предложил мне разбить мой класс, но этот случай здесь не имеет смысла. В некотором контексте это пул, в котором функция удаления и некоторые другие будут изменены, если тип объекта пула может быть общим или нет.
Поэтому я попытался использовать std::enable_if
, но все еще есть некоторые ошибки (Я хочу, чтобы декларация и реализация были отдельными).
#include <type_traits>
template < typename Object, bool Shared = false >
class Foo {
template < bool S = Shared, typename std::enable_if<S>::type* = nullptr >
void bar();
template < bool S = Shared, typename std::enable_if<!S>::type* = nullptr >
void bar();
};
template < typename Object,
bool Shared >
template < bool S, typename std::enable_if<S>::type* = nullptr >
void Foo<Object, Shared>::bar() {
//do something
}
template < typename Object,
bool Shared >
template < bool S, typename std::enable_if<!S>::type* = nullptr >
void Foo<Object, Shared>::bar() {
//do nothing
}
int main() {
Foo<int> test;
return 0;
}
Test3.cpp:16:33: error: default argument for template parameter for class enclosing ‘void Foo<Object, Shared>::bar()’
void Foo<Object, Shared>::bar() {
^
Test3.cpp:24:33: error: default argument for template parameter for class enclosing ‘void Foo<Object, Shared>::bar()’
void Foo<Object, Shared>::bar() {
EDIT: Убрана ошибка копирования/вставки
Я нашел что-то довольно круто: https://www.youtube.com/watch?v=aXSsUqVSe2k –