如何访问传入模板参数的私有成员数据

How to Access Private Member Data of a Passed in Template Parameter

本文关键字:参数 数据 成员 何访问 访问      更新时间:2023-10-16

正在添加一个类似于set的自定义比较器函数,但它是作为模板参数传入的。为了测试这是否有效,我有一个构造函数,它使用这个模板形参对象作为实参,并将相同类型的私有成员设置为传入的实参。如何访问将作为模板参数传入的类中声明的私有成员?

下面是必要的代码:

template <typename T,class Comparator = std::less<T>> class square_list

private: Comparator m_cmp; // The private object within my container class

square_list(Comparator const& cmp) : m_cmp(cmp) { if (m_cmp.mode == 1) data_.sort(); } \ The private member data I'm trying to access (.mode)

作为模板参数传入的类(它在单元测试文件中):

template <class T>
class RuntimeCmp
{
     public:
        enum cmp_mode { normal, reverse };
     private:
        cmp_mode mode;
     public:
        RuntimeCmp( cmp_mode m = normal ) : mode(m) { }
        bool operator()(T const& t1, T const& t2) const { return mode == normal ? t1 < t2 : t2 < t1; }
        bool operator==( RuntimeCmp const& rc ) { return mode == rc.mode; }
};

和一个例子,我的容器是如何被构造与模板参数传入:

BOOST_AUTO_TEST_CASE( ut_ctor_compare_passed ) {
     RuntimeCmp<double> rc(RuntimeCmp<double>::reverse);
     square_list<double,RuntimeCmp<double>> s(rc);
     vector<double> data = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
     for (auto x : data)
          s.insert(x);
      BOOST_CHECK( std::equal( s.begin(), s.end(), data.rbegin() ) );
}

我想把它变成一个朋友课或类似的东西?谢谢你的建议!

看这个链接:https://github.com/altamic/privablic