我想知道是否有任何方法可以将整个ListBox对象作为参数传递?好吧,基本上我只需要列表框中选择的索引属性,所以我很容易通过将它的值保存到int并传递该int来解决这个问题。但出于好奇,我想知道你是否可以将ListBox作为参数传递。我试过了:
std::string TxtFileName(ListBox listBox);
然而,这给了我error C2065: 'ListBox' : undeclared identifier
答案 0 :(得分:1)
ListBox
不属于标准C ++(与int
或std::string
或std::cout
不同)。
所以不清楚你在说什么ListBox
。它来自MS库吗?或者从像wxWidgets或QT这样的GUI工具包中?或者它是完全不同的东西?
通常,我曾经使用任何GUI库来处理表示GUI元素的类作为实体类。这些类指的是唯一可识别的外部资源,在这种情况下是屏幕上的东西。它们在概念上不是独立的。精心设计的实体类不可复制,因为复制唯一的外部资源没有意义。 复制代表屏幕上某个特定列表框的对象是什么意思?
这与表示数字,矩阵,文本或日期的类不同。例如,您可以复制std::string
。字符串不引用唯一资源。文本内容不是唯一的。您可以有一个字符串"foo"
和另一个字符串"foo"
。这种不同类的类称为值类。值类是可复制的。
您的列表框不可复制(或不应该是可复制的)这意味着您不能(或不应该)通过值将其传递给函数。按值传递复制对象。即使编译器可以优化掉副本,它在概念上也存在,因此该类必须支持复制:
void f(ListBox listBox); // will not compile if class is well-designed,
// should not be done by you in either case
你必须通过引用传递。由于您只对从列表框中检索某个索引感兴趣,您甚至可以通过const引用传递,这更安全:
void f(ListBox const &listBox); // OK