gpt4 book ai didi

c++ - 使用通用私有(private)成员设计模板类

转载 作者:太空宇宙 更新时间:2023-11-04 15:23:53 25 4
gpt4 key购买 nike

我想其他一些人之前也遇到过这个设计问题,所以我希望有人能给我一些建议,告诉我该怎么做:我有一个类应该包含一个私有(private)通用对象。据我所知,如果不将整个类作为模板,我就无法逃脱。美好的。但是现在,有没有什么方法可以在构造函数参数的构造过程中推断出底层对象的类型,而无需显式指定它(我想在实例化 Derived 类时省略模板参数 Test ):

#include <iostream>

template <typename T>
class Generic
{
};

class Derived : public Generic<int>
{
public:
Derived ();
int GetFoo ();
private:
int m_foo;
};

template <typename T>
class Test
{
public:
Test (T &underlying);
private:
T m_underlying;
};

Derived::Derived ()
{
this->m_foo = 666;
}

int Derived::GetFoo ()
{
return this->m_foo;
}

template<typename T>
Test<T>::Test (T &underlying) : m_underlying(underlying)
{
std::cout << this->m_underlying.GetFoo() << std::endl;
}

int main ()
{
Derived underlying;
Test<Derived> test(underlying);

return 0;
}

为了实现我的目标,是否还有其他我应该注意的设计策略?

最佳答案

通常你有一个类模板和一个类型推导函数模板:

template <typename T>
struct Foo
{
Foo(T const &);
};

template <typename T>
Foo<T> make_foo(T const & t)
{
return Foo<T>(t);
}

用法:

auto foo = make_foo(1728);   // makes a Foo<int>

这个想法在标准库中使用了无数次(例如make_pairmake_tuplemake_shared)。指导原则是您最多应该说出一次所需的类型名称,如果可以推断则完全不要说。

关于c++ - 使用通用私有(private)成员设计模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13404885/

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