gpt4 book ai didi

c++ - 定义专用模板类构造函数时避免重复

转载 作者:行者123 更新时间:2023-11-30 00:45:50 25 4
gpt4 key购买 nike

假设我有一个模板类:

template<typename T>
class Widget {
public:
Widget(const std::string& name, int i) : t_(name), cf_(name), ci_(i) {}
private:
T t_;
const Foo cf_;
const int ci_;
}

假设,在这种情况下,T只会是 Fooint .除 Widget<Foo> 以外的任何内容和 Widget<int>在这种情况下是无稽之谈。

上面声明的构造函数适用于 Widget<Foo> .有没有办法为 Widget<int> 定义一个专门的构造函数? , 它分配给 t_不同的是,没有复制粘贴 cf_ 的初始化和 ci_ ?

本质上类似于对 Base(a) 的调用在 Derived::Derived(int a, int b) : Base(a), b_(b) {}也许?

最佳答案

标签调度和转发构造函数可能会有所帮助

template <typename> struct Tag {};


template<typename T>
class Widget {
public:
Widget(const std::string& name, int i) : Widget(Tag<T>{}, name, i) {}

private:
Widget(Tag<int>, const std::string& name, int i) :
Widget(Tag<void>{}, 42, name, i)
{}

Widget(Tag<Foo>, const std::string& name, int i) :
Widget(Tag<void>{}, name, name, i)
{}

template <typename U>
Widget(Tag<void>, U&& u, const std::string& name, int i) :
t_(std::forward<U>(u)),
cf_(name),
ci_(i)
{}

private:
T t_;
const Foo cf_;
const int ci_;
};

关于c++ - 定义专用模板类构造函数时避免重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41309680/

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