我目前有两个项目在我的解决方案中说项目A和项目B. 现在,项目A和B都使用类似的类,每个项目中都会找到每个类的副本.我想知道是否有更好的方法来完成这项任务.我希望在某个地方有一个单独的类,并让两个项目从那里访问公共类.推荐的方法是什么?
我试图从基于MFC的应用程序移植某个功能.显然我没有MFC的经验.我感兴趣的类继承自CAsyncSocket.当在MSDN上查找该类时,它声明该类派生自afxsock.h.当我将它添加到我的控制台应用程序代码时,我收到以下错误消息
Error 1 error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d] d:\program files (x86)\microsoft visual studio 10.0\vc\atlmfc\include\afx.h
Run Code Online (Sandbox Code Playgroud)
有关如何解决此问题的任何建议?
目前在我的项目中我有两个静态方法PushObjects和ProcessObject.该PushObject方法将数据推送到静态双端队列,这个方法可以被多个线程访问,但是ProcessObject它总是由单个线程使用,用于从顶部检索对象并删除它们.现在我的问题是无论我尝试什么我总是最终(迟早会得到一个deque iterator not dereferencable错误.关于我能做些什么来阻止这个问题的任何建议.我的摘要PushObjects和ProcessObject下面给出的
void foo::PushObjects(obj A)
{
try
{
{//Begin Lock
boost::lock_guard<boost::mutex> lock(mutex_push);
mydeque.push_back(A);
}//End Lock
condition_read.notify_one(); //Inform the reader that it could start reading
}
catch (std::exception& e)
{
__debugbreak();
}
}
This is the static Reader method
void foo::ProcessObject()
{
{//Begin Lock
boost::unique_lock<boost::mutex> lock(mutex_process);
while(true)
{
while(mydeque.empty()) { condition_read.wait(lock); }
try
{
if(!mydeque.empty())
{
obj a = mydeque.front();
......Process the object........
mydeque.pop_front();
} …Run Code Online (Sandbox Code Playgroud) 我想知道boost是否有任何有助于实现自旋锁的库.我知道boost支持互斥锁,但我找不到任何在boost中显示或描述自旋锁的示例.显示如何使用boost(最好)实现自旋锁的示例将不胜感激.(C++ 98)
我有以下代码片段
class base
{
public:
virtual void MyMethod()
{
std::cout << "Base MyMethod" << "\n";
}
};
class der : public base
{
public:
virtual void MyMethod()
{
std::cout << "Derived MyMethod" << "\n";
}
};
void foo(base* b)
{
der* d = static_cast<der*>(b);
d->MyMethod();
}
int main()
{
base* b = new der();
foo(b);
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是为什么 static_Cast 在这里工作。我读到 static_casts 不能通过多态类型进行转换。那么为什么上面的例子有效 - 我在这里遗漏了什么吗?我期望动态转换只能解决这样的问题,因为它们应该与多态类型一起使用?谁能举一个例子,静态转换会失败而动态转换会通过?
我目前在我的cpp文件中有大约50个或更多包含.我想知道组织这种情况的最佳政策是什么.我应该继续添加更多包含吗?或者我应该采取另一种方法?如果是这样,应该是什么?
说我有以下类类型
class base
{
};
class der : public base
{
};
Run Code Online (Sandbox Code Playgroud)
使用static_Cast,您可以使用对象和指针.
我试过以下 - 哪个有效(指针)
base* b = new base();
der * m = static_cast<der*>(b);
Run Code Online (Sandbox Code Playgroud)
但是以下不起作用
base b;
der m = static_cast<der>(b);
Run Code Online (Sandbox Code Playgroud)
有什么建议为什么第二个不起作用?静态转换不处理指针和对象吗?它适用于指针,但它不能与对象一起使用?
我正在阅读C++ 11,我有以下问题.假设我有以下粗略代码
class foo
{
public:
foo()
{std::cout << "Regular constructor \n";}
foo(const foo& a)
{std::cout << "Copy constructor \n";}
foo& operator=(const foo& a)
{std::cout << "Copy Assignment operator \n";}
foo(foo&& a)
{
std::cout << "Move constructor \n";
}
foo& operator=(foo&& a)
{std::cout << "Move Assignment operator \n";}
int a;
};
foo myfunction()
{
foo d;
d.a =120;
return d;
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我做这样的事情
foo a = myfunction();
Run Code Online (Sandbox Code Playgroud)
我知道将调用move构造函数,因为myfunction()返回一个rvalue类型.现在我注意到如果我从我的类中删除移动构造函数代码,则调用复制构造函数.我的问题是为什么会发生这种情况?如果myfunction的返回类型是foo &&并且复制构造函数接受foo,那么为什么要调用复制构造函数?我正在使用Vs2012.
我想留下一个特定的号码.具体的没有.时间.我正在尝试这样的事情
//Left shift 3 1's by 5.
int a = 0;
a = 0b(111 << 5) ; //Error : unable to find numeric literal
// operator 'operator""b'
std::cout << a; //Should be 224
Run Code Online (Sandbox Code Playgroud)
关于如何解决上述问题的任何建议?理想情况下,我想要这样的东西
int a = 0;
int noOfOnes = 3;
a = 0b(noOfOnes << 5);
Run Code Online (Sandbox Code Playgroud)
我不确定如何在C++中完成上述操作?
我正在尝试执行以下操作.但是我不确定我哪里会出错
uint64_t x = (1 << 46);
std::cout << x;
Run Code Online (Sandbox Code Playgroud)
我明白了
-warning:左移计数> =类型的宽度[-Wshift-count-overflow]
我得到输出0.我期待像这样的二进制的十进制输出
1 0000........00 (46 0s)
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么我会收到这个警告?不是uint64_t 64位?为什么我得到输出0?