c++ - 有条件的使用声明
问题描述
#include <iostream>
using namespace std;
template<bool enable, typename T>
struct foo;
template<typename T>
struct foo<false , T>
{
//nothing
};
template<typename T>
struct foo<true , T>
{
void say_hello()
{
cout << "Hello !" << endl;
}
protected:
int m_some_data_when_I_enabled{};
};
template<bool Enable, typename T>
struct bar
:
foo<Enable , T>
{
//And there are lots of functions and members
//Here I need conditional 'using'
using foo<Enable , T>::say_hello;
void say_hello(int different_signature)
{
}
};
struct duck { };
int main(int, char**) {
bar<true , duck> enabled_bar;
bar<false , duck> disabled_bar;
}
当我声明 bar 时它给出了一个错误。对于我,这说得通。所以我需要类似的东西:
template<typename = typename std::enable_if<Enable>::type>
using foo<Enable , T>::say_hello();
我知道我可以通过专门化 'bar' 来解决问题,但它有一些成员,在这种情况下,我会复制很多代码。有没有不同的,也许是棘手的方式?
解决方案
您可以在您的第一个 foo 中声明已删除say_hello
,这使得该using
声明bar
合法。
template<typename T>
struct foo<false , T>
{
void say_hello() = delete;
};
这是完整的示例。
推荐阅读
- blender - 将原点设置为几何移动对象
- php - 我的 elseif 语句仅适用于第一个语句
- python - 如何将文件移动到另一个目录 django-storage s3
- django - Why is Model.objects.filter returning an empty query?
- java - Java 中的锯齿状数组和嵌套 For 循环
- java - 迄今为止的确切字符串并保持原始格式
- python - 鱼:未知命令:使用自定义 python 命令时 uname
- wpf - 当我将一组 DependencyProperties 封装到一个 DependencyObject 中时,属性更改会自动转发到 UserControl 吗?
- python - 使用 Graphql 和 Channels 包的 Django 应用程序在应用程序内抛出异常:“NoneType”对象没有属性“替换”
- .net-core - 在 MS Build 中复制到输出时如何保留文件夹?