c++ - 有没有办法在数据成员上使用 decltype 来声明方法参数
问题描述
考虑一些简单的代码:
struct A {
using Type = int;
};
struct B {
void test( A::Type i ) { printf("%d\n", i); }
A a;
};
然而,在实际示例中,“A”是一个长长的模板类型,键入起来并不有趣。即使我确实需要输入它(声明它),我也不想输入两次。即使我在这两个地方都做对了,这是可以改变的,所以这将是一个令人头疼的维护问题。
所以,问题是,如何在不明确提及“A”的情况下向 B::test 声明参数?
我试过这样的事情:
void test( decltype(a)::Type )
但这不起作用,因为“a”没有在声明的范围内声明。如果我使用 decltype(B::a),我会得到 B 不完整的错误。
有没有办法做到这一点?
解决方案
在这些情况下,请创建别名。然后,您可以在类中的任何地方使用它——即使是在声明 时a
,您也不需要重新组织类定义中的成员。
struct a_long_template_type_that_is_not_fun_to_type {
using Type = int;
};
struct B {
using type_alias = a_long_template_type_that_is_not_fun_to_type;
void test( type_alias::Type i ) { printf("%d\n", i); }
type_alias a;
};
推荐阅读
- java - LinkedBlockingQueuefullyLock() 抛出异常,fullyUnlock() 不会执行
- multithreading - Grpc 双向流的客户端重启逻辑
- java - oracle.jdbc.OracleDatabaseException:ORA-01400:无法将 NULL 插入
- firebase - 如何仅为动态链接而不为托管设置自定义子域?
- ssl - Janus 演示未在 AWS EC2 上运行
- java - java中的ZKTECO SDK初始化失败
- javascript - 导入现有 .jsx 文件时“找不到模块的声明文件”
- c++ - 如何组合头文件并创建DLL
- javascript - 在多步骤表单中单选按钮验证
- c# - 在 C# 中的组合框 WPF 上设置 DataTable 合并的主键的问题