使用模板时,是否可以确定LVALUE的类型
When using templates, is it possible to determine the type of Lvalue?
很难将其放入文字中,因此这是一个示例:
int (*foo)(int) = load_sym<decltype(foo)>("foo");
template <typename T>
T load_sym(char *sym) {
/* some other stuff */
return (T)dlsym(sym);
}
如果可能的话,我想省略decltype(foo)
零件使其简洁。问题是,我可以在不明确指定为模板参数的情况下确定T
吗?
直觉可能是不可能的,但是我很想知道人们是否提出了工作。
怎么样?
auto foo = load_sym<int (*)(int)>("foo");
这是一个避免auto
并在非静态数据成员的情况下工作的解决方案,但有点丑陋。
struct Symbol {
Symbol(void* p) : p(p) {}
template <typename T>
operator T*() { return reinterpret_cast<T*>(p); }
void* p;
};
Symbol load_sym(const char *sym) {
/* some other stuff */
return dlsym(sym);
}
现在您可以做
int (*foo)(int) = load_sym("foo");
Symbol
类只是存储load_sym
的返回值,但提供了一个转换操作员模板,该模板可用于将void*
转换为任何类型的指针。
(请注意,void*
转换为功能指针类型是有条件的,但我相信Posix需要它。)
相关文章:
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 防止主数据类型C++的隐式转换
- 大量序列中核苷酸类型的快速计数
- 对RValue对象调用的LValue ref限定成员函数
- 如何从C++中的依赖类型中获得它所依赖的类型
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如何获取std::result_of函数的返回类型
- 从父命名空间重载类型
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 访问者访问变体并返回不同类型时出错
- C++:无法使用条件类型在模板函数中使用 'double' 类型的 lvalue 初始化 'char*' 类型的参数
- LVALUE和RVALUE返回类型以提高效率
- rvalue参考绑定到std ::功能类型的LVALUE
- 通用参考模板类型始终评估到LVALUE
- 使用模板时,是否可以确定LVALUE的类型
- C++ LValue 和 Rvalue 的参考,无需类型推断
- 引用(类型 &)"non-const lvalue reference to type cannot bind"错误,但指针(类型 *)不错误