我们都同意公共变量不利于封装以及所有这些.但是,我注意到有很多代码可以执行此类操作:
class foo {
private:
int integer_;
string someString_;
// other variables
public:
int& integer() { return integer_; }
string& someString() { return someString_; }
// other "functions"
}
int main() {
foo f;
f.integer() = 10;
f.someString() = "something";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我已经看到这在许多地方被使用,我不明白为什么.基本上它返回对数据的引用,从而将其直接暴露给外部.所以封装并没有真正实现,不是从任何角度来看.
为什么这个常用?
我无法理解托管C++如何工作和编译.
在.NET Framework中,您可以使用C#/ VB/F#/ ..等开发代码.并且所有这些语言都将编译为与Java字节码类似的相同公共中间语言(CIL).从理论上讲,CIL可以安装在任何平台上(Mono使其实用).在Windows上,CLR将CIL编译为本机代码Just-In-Time(JIT),一切运行顺利,好用.
现在,Managed C++如何编译?它是否编译为CIL代码并等待CLR使用JIT运行它?我认为不是,因为托管C++可以使用标准C++代码(不编译为CIL).此外,它如何使用.NET程序集(CIL)?
我将不胜感激任何帮助.谢谢
编辑:
我看到了这个答案.它指出,在C++/CLI中,托管代码被编译为MSIL,您可以选择将非托管代码编译为本机代码或MSIL.因此,我现在明白如何调用.NET程序集.
无论如何,如果将非托管代码编译为本机代码,我仍然不明白如何在同一程序集中使用托管代码运行C++非托管代码.有任何想法吗?
我有以下功能:
void threadProc(){
for (int i = 0; i < 5; ++i) {
std::cout << "\n thread #" << std::this_thread::get_id() << " says hi";
}
std::cout << "\n Finished executing thread #" << std::this_thread::get_id();
}
Run Code Online (Sandbox Code Playgroud)
我使用它的方式如下:
int main(){
try {
std::thread t1(threadProc);
t1.join();
std::thread t2(threadProc);
HANDLE handle = t2.native_handle();
WaitForSingleObject(handle, INFINITE);
std::this_thread::sleep_for(std::chrono::milliseconds(5000));
std::cout << "\n thread t2 is joinable: " << std::boolalpha << t2.joinable() << "\n\n";
}
catch (std::exception& ex){
std::cout << "\n\n " << ex.what() << "\n\n";
}
return …Run Code Online (Sandbox Code Playgroud) 我有一堆线程正在处理多个数据项.线程必须按照我将数据传递给线程的相同顺序输出结果.那是:
Thread #1: give data - start processing
Thread #2: give data - start processing
Thread #3: give data - start processing
...
Thread #n: give data - start processing
Run Code Online (Sandbox Code Playgroud)
应该以与传递给线程的数据相同的顺序检索结果,而不管哪个线程首先完成处理.即:
Thread #1: put data
Thread #2: put data
...
Run Code Online (Sandbox Code Playgroud)
为了区分线程并管理它们,我给每个人一个ID (0,1,2,...,n).我正在使用ID为每个线程分配数据,以便它可以处理它.
for(int i=0; i<thread_count; i++)
give_data(i); // i is id and the function knows where to get data from
Run Code Online (Sandbox Code Playgroud)
我希望线程共享一个令牌,该令牌决定了预期产生结果的线程.所有线体都是相同的,主体看起来像:
while(true){
auto data = get_data();
result = process_data(data);
while(token != this_id) spin;
put_data(result); // this is a synchronized …Run Code Online (Sandbox Code Playgroud)