gpt4 book ai didi

c++ - 更改类模板成员可见性

转载 作者:太空狗 更新时间:2023-10-29 20:44:43 27 4
gpt4 key购买 nike

假设我有一个 C++ 类模板:

template <class _T>
class MyClass
{
public:
int func();

private:
_T internal;
};

我想要一种方法来为这个模板指定一个 bool 值,当它为真时,将使这个模板中的每个成员都公开。

例如:

MyClass<SomeClass, false> c1;
c1.internal.someFunc(); // ERROR

MyClass<SomeOtherClass, true> c2;
c2.internal.someFunc(); // SUCCESS

对于那些想知道的人,我正在使用 gtest 和 gmock 来模拟具体类。所以,在我的一个单元测试中,我会有类似的东西:

TEST(MyClass, Test1) {
MyClass<SomeMockClass, true> c1;
EXPECT_CALL(c1.internal, someFunc()).Times(1);
}

对于这个测试模板,我的代码必须可以访问内部。在生产中,我想对用户隐藏它。

我使用的是 msvc 11 (Visual Studio 2012),因此我可以访问一些 C++11 功能和元编程结构。

最佳答案

你可以从主类继承一个test helper,你声明friend的helper,然后将你感兴趣的元素public提升:

#include <iostream>

template<typename T> class TestMyClass;

template<typename T>
class MyClass
{
friend class TestMyClass<T>;
public:
int func();
private:
T internal;
};

template <class T>
class TestMyClass : public MyClass<T>
{
public:
using MyClass<T>::internal;
};

int main()
{
TestMyClass<double> s;
s.internal = 5;
std::cout << s.internal << "\n";
return 0;
}

关于c++ - 更改类模板成员可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12361799/

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