gpt4 book ai didi

c++ - 如何隐藏基于模板参数的函数

转载 作者:太空宇宙 更新时间:2023-11-04 15:53:52 24 4
gpt4 key购买 nike

我正在使用 Visual Studio 2008。我有这个类:

template <bool T1>
class Foo {
public:
void doSomething() {}

Foo<T1>& operator=(int a) {
doSomething();
return *this;
}
};

但我想要那个方法 operator=被隐藏(通过简单地做: return *this )如果模板参数 T1是假的。

对于 Foo 的实例,我需要这些行:

Foo<false> foo;
foo = 20; //this should give a compilation error

所以我尝试专门化类定义:

template<>
class Foo<false> {
private:
Foo<false>& operator=(int a) {
return *this;
}
};

但是,这样做我失去了方法 doSomething()Foo<false> 的实例上,这不是我需要的。

我试过删除 operator=使用 boost::enable_if,像这样:

typename boost::enable_if<
boost::mpl::bool_<T1>
, Foo<T1>
>::type&
operator=(int a) {
callProxy();
return *this;
}

但这让我无法像下面这样上课:

class Bar {
public:
Foo<true> assignable;
Foo<false> unassignable;
};

我也试过将这两种方法都放在 Foo 中并用 boost::enable_if 删除它们和 boost::disable_if ,像这样:

 template <bool T1>
class Foo {
public:
void doSomething() {}

typename boost::enable_if<
boost::mpl::bool_<T1>
, Foo<T1>
>::type&
operator=(int a) {
doSomething();
return *this;
}

private:
typename boost::disable_if<
boost::mpl::bool_<T1>
, Foo<T1>
>::type&
operator=(int a) {
return *this;
}
};

哪个也行不通(我预料到了,但值得一试)。

那么,是否有可能获得我需要的行为,如果可以,我该怎么做?

最佳答案

为什么不直接使用常规的 if() 呢?

if(T1) doSomething();

关于c++ - 如何隐藏基于模板参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3104993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com