嵌套模板化指针类型的简洁初始化

时间:2018-03-30 05:51:36

标签: c++

给出以下类型:

public ActionResult Index(int id)
{
    IEnumerable<Project.Model.MySalaryModel> staffWithTheirSalary = from staff in data.Staff
            join salary in data.Salary on staff.Id equals salary.Id
            select new Project.Model.MySalaryModel 
            {
                Id = staff.Id,
                Name = staff.Name,
                Salary = salary.Value,
            };

    return View(staffWithTheirSalary);
}

如果我有template <class T> struct A { A(const T& t) : t_(t) {} T t_; }; 类型的变量,我可以将其初始化为

A<A<A<int>>>

或更简洁的

A<A<A<int>>> a = A<A<A<int>>>(A<A<int>>(A<int>(1)));

现在假设我有一个A<A<A<int>>> a = {A<A<A<int*>*>*>*}; 类型的变量。我可以将它初始化为:

A<A<A<int*>*>*>* a = new A<A<A<int*>*>*>(new A<A<int*>*>(new A<int*>(new int(1)));

但要不那么冗长......我被困住了。没有new版本的支撑初始化列表,并且尝试使用模板参数推导来保存重复类型会导致无法推断返回类型。 (即我无法让a = make_a(make_a(make_a(1)))工作。)

有没有办法不对我的代码的读者造成眼睛疼痛?

0 个答案:

没有答案