对于模板化的构造函数,几乎总是使用Auto规则
Almost Always Use Auto rule with templated constructor?
我最近在c++ 14中采用了几乎总是自动的模式,但是遇到了一个情况,我无法弄清楚如何使用auto
语法编写:模板化构造函数。
假设我有一个类:
class my_type{
public:
template<typename T>
my_type(){/* ... */}
};
我试着:
auto var = my_type<float>{};
当然,这不起作用,因为它假定my_type
是模板而不是它的构造函数。
那么我怎么能使用auto
语法来初始化这个变量?
虽然它不是真正关于auto
,有一种方法来选择模板化的,如果你想-你需要欺骗,并给他们一个参数。
struct A {
private:
template <typename T> struct TypeWrapper {};
template <typename T> explicit A(TypeWrapper<T>) {}
public:
template <typename T>
static A make_A() {
return A(TypeWrapper<T>{});
}
};
int main() {
auto i = A::make_A<int>();
auto d = A::make_A<double>();
auto r = A::make_A<A>();
// etc. etc.
}
相关文章:
- 此代码是否违反一个定义规则
- 生成文件不对文件使用隐式规则
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 变量可能尚未初始化[MIRA 2012规则9.1,强制性]
- 静态结构和一个定义规则
- 如何在自定义类中启用'auto loops'?
- 尽管遵循了规则,内存泄漏在哪里
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 这是关于成员访问规则的正确摘要吗
- uint_not_usable_without_attribute在业力规则中使用数字生成器时静态断言失败
- 增强精神解析器规则以检测语句中的特殊结尾
- 制作文件:没有规则来制定目标:如何设置正确的规则?
- 为什么当我为 for(auto& it : myUnorderedMap) {... = std::move(it.second)} 时,我会得到一个 const 引用?
- 为什么结构化绑定不使用"auto&"返回对结构成员的引用,而是返回成员本身
- 擦除许多矢量元素,同时使用'auto'
- 为什么此指针值不能转换为整数的规则是什么?
- 考虑到其他好处,关键字'auto'真的有助于简化调试C++吗?
- 在 decltype(auto) 的情况下,lambda 是否有特殊规则?
- 在 Objective-C++ 中应用于__weak指针时,通过关键字推导类型"auto"规则是什么?
- 对于模板化的构造函数,几乎总是使用Auto规则