Первый вариант использования невозможен. Вы не можете сделать модификаторы функций условными и основанными на каком-то шаблоне. Однако я полагаю, что вы пытаетесь это сделать, потому что не хотите копировать и вставлять код между const
и обычной версией функции. В этом случае просто напишите метод private
impl, который выполняет фактическую работу, и используйте его в cost
и не const
версии класса.
private:
int& get_impl() const {...}
public:
const int& get() const {return get_impl();}
int& get() {return get_impl();}
Остальное возможно и довольно просто:
std::unique_ptr<"const" int>
// we can do this by:
std::unique_ptr<std::conditional_t<isConst, const int, int>> ...
// this can be written more elegantly as
template <typename T, bool isConst>
using const_if_t = std::conditional_t<isConst, const T, T>;
std::unique_ptr<const_if_t<int, isConst>>;
Создание переменных-членов const
по условию было бы довольно бессмысленным, потому что это уже происходит, когда вы в любом случае создаете переменную const
.