所以我有一个结构,在那里我想从另一个方法中访问其中的特定值。我不允许修改结构本身。这是结构和几个用于初始化和访问它的函数。
struct StdCardConfirmationReceipt
{
private:
std::string sOfrIdOrderCentral;
std::string sOrderIdOrderCentral;
std::string sFulfillmentOrderIdOrderCentral;
public:
StdCardConfirmationReceipt()
{
sOfrIdOrderCentral = "";
sOrderIdOrderCentral = "";
sFulfillmentOrderIdOrderCentral = "";
}
StdCardConfirmationReceipt& operator=(const StdCardConfirmationReceipt& source )
{
sOfrIdOrderCentral = source.sOfrIdOrderCentral;
sOrderIdOrderCentral = source.sOrderIdOrderCentral;
sFulfillmentOrderIdOrderCentral = source.sFulfillmentOrderIdOrderCentral;
}
我想获取这些值'sOFrIDOrderCentral'和sFulfillmentOrdIdOrderCentral'并将其放在另一个结构中。这可能与上面的代码?这是我在其他方法中使用的for循环来访问struct。
for(std::vector<StdCardConfirmationReceipt>::iterator vIter= mvCardConfirmationReceiptList.begin(); vIter != mvCardConfirmationReceiptList.end(); ++vIter)
{
//need to accesss OFrIDOrderCentral and sFulfillmentOrdIdOrderCentral
}
答案 0 :(得分:1)
http://bloglitb.blogspot.com/2010/07/access-to-private-members-thats-easy.html
基本上,您要求访问私人会员。引用链接的完整来源以确保它不会过时:
#include <iostream>
using namespace std;
template<typename Tag>
struct result {
/* export it ... */
typedef typename Tag::type type;
static type ptr;
};
template<typename Tag>
typename result<Tag>::type result<Tag>::ptr;
template<typename Tag, typename Tag::type p>
struct rob : result<Tag> {
/* fill it ... */
struct filler {
filler() { result<Tag>::ptr = p; }
};
static filler filler_obj;
};
template<typename Tag, typename Tag::type p>
typename rob<Tag, p>::filler rob<Tag, p>::filler_obj;
struct A {
private:
void f() {
std::cout << "proof!" << std::endl;
}
};
struct Af { typedef void(A::*type)(); };
template class rob<Af, &A::f>;
int main() {
A a;
(a.*result<Af>::ptr)();
}
基本上使用这种方法可以达到你想要的效果。但是,你不应该这样做。它破坏了封装并创建了极其脆弱的代码。
这可能导致令人难以置信的维护问题,并且通常是可怕的编程实践。你的答案得到如此多的支持者的原因是因为如果你颠覆了语言中内置的信息隐藏机制,它会促进可怕的代码。
答案 1 :(得分:0)
不幸的是,所有这些成员都是私有的,因此无法从课外访问 。您需要编写访问者函数:
within '#\.0\.0\.1\.1\.2\.1\.\$0\.0\.2\.0\.1'
答案 2 :(得分:-1)
如果您有一个包含要访问的私有数据成员的结构,则可以在结构定义之前始终#define private public
并正常访问它们。如果可以,只使用访问器功能,因为这是非常糟糕的做法。