是否强制转换constC++ 中定义的成员函数指针?以下是有效代码吗?
struct T {
void foo(int i) const { std::cout << i << std::endl;};
};
void (T::*f1)(int) const = &T::foo;
void (T::*f2)(int) = reinterpret_cast<void (T::*)(int)>(f1);
T t;
(t.*f2)(1);
Run Code Online (Sandbox Code Playgroud)
更新:
我需要这个的原因是我正在编写一个函数,它接受一个对象和一个指向该对象的成员函数指针。我需要一个 const 对象的版本(只接受 const 函数)和一个普通的。由于我不想要重复的代码,我的想法是将实际代码放在非常量版本中,并从 const 版本中调用它,丢弃任何常量。
在C++ 11中的一些unique_lock 构造函数中,可以传递一些类,如标志,即
auto lock = std::unique_lock<std::mutex> lock(m, std::defer_lock);
Run Code Online (Sandbox Code Playgroud)
在哪里std::defer_lock定义为
struct defer_lock {}
Run Code Online (Sandbox Code Playgroud)
为什么这样做,而不是枚举?
我试图将它应用于一个小代码示例,但我无法编译:
class A {};
void foo(A a) {}
int main() {
foo(A); // error: 'A' does not refer to a value
}
Run Code Online (Sandbox Code Playgroud)
当我把括号放在一起foo(A());工作时,但我没有看到STL的区别.为什么这有不同的表现?
请使用以下代码:
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <chrono>
using namespace std;
int main() {
mutex m;
condition_variable c;
bool fired = false;
int i = 0;
// This thread counts the times the condition_variable woke up.
// If no spurious wakeups occur it should be close to 5.
thread t([&]() {
unique_lock<mutex> l(m);
while (!fired) {
c.wait_for(l, chrono::milliseconds(100));
++i;
}
});
// Here we wait for 500ms, then signal the other thread to stop
this_thread::sleep_for(chrono::milliseconds(500));
{
unique_lock<mutex> …Run Code Online (Sandbox Code Playgroud) 我为我编写的应用程序开发了一个XML模式.现在我想记录最终用户的有效结构,但是我无法想出任何自然的方法来做到这一点.我见过像xs3p这样的东西,它实际上将xsd架构转换为HTML表示,但这对我来说看起来不是很好的文档; 用户不需要知道关于模式的任何信息,以了解他可以做什么.
任何想法如何记录这个?任何程序/编辑/图形解决方案或我可以构建的概念?
当运行带有多个进程(make -jN)的CMake生成的Makefile时,输出通常会像这样搞乱:
[ 8%] [ 8%] [ 9%] Building CXX object App/CMakeFiles/App.dir/src/File1.cpp.o
Building CXX object App/CMakeFiles/App.dir/src/File2.cpp.o
Building CXX object App/CMakeFiles/App.dir/src/File3.cpp.o
Run Code Online (Sandbox Code Playgroud)
我不确定,但我认为这种行为也适用于不是由CMake生成的Makefile.我会说当多个进程同时写入stdout时会发生这种情况.
我知道我可能很迂腐,但有没有(简单)解决这个问题?;)
以下代码似乎适用于我尝试过的编译器(clang,g ++,Linux和Mac OS),但它是否能保证始终能达到人们的期望?
struct A {
virtual void foo() = 0;
};
struct A2 {
virtual void foo() = 0;
};
struct B : public A2 {
void foo() {
printf("test\n");
}
};
int main() {
B* b = new B;
((A*)b)->foo();
}
Run Code Online (Sandbox Code Playgroud)
我意识到这是不好的做法,不应该这样做,但它一般是否有效?
在具有可以正常加载的页面或从ajax(jQuery.load())加载的应用程序中,如何正确设置rails格式?现在我在每个动作中都使用以下代码:
def show
respond_to do |format|
format.html { render layout: !request.xhr? }
end
end
Run Code Online (Sandbox Code Playgroud)
有没有办法使这个全球化,而不是必须在每个行动中写它?
编辑:
我试着把它放在after_filter评论中的建议中,但这给了我一个错误Render and/or redirect were called multiple times in this action.
我正在寻找关于如何在Cocoa中实现编辑的一些非常一般的建议.不是文本,而是形状,图片等.基本上我想在绘图板上实现对象,用户可以拖动,分配新内容,调整大小,...类似于几乎任何图形编辑器,如Keynote,Pages,Drawing程式.
我认为Cocoa中没有内置解决方案,我不知道任何其他实现(除了CGDrawKit,但这只是为了绘图).关于如何实现这一点,您有什么建议?
如何在 Ruby on Rails 中使用 XML 布局?当使用HTML文件application.html.erb用<%= yield %>就足够了,但没有工作XML。一个名为的文件application.xml.builder被执行,但yield不起作用(<%= %>当然没有)。有什么方法可以做到这一点?
我正在编写一个应用程序,它在两个实例之间并行运行了多个(数百个)并发网络操作.由于连接的平均寿命非常短(最多几秒),我认为每次使用许多TCP连接并进行握手(特别是对于TLS握手)的开销太大.
我开始研究实现多路复用的几个协议和库(主要是Apache Qupid,RabbitMQ等AMQP实现,如本问题的答案中所述).然而,所有这些似乎都在TCP上运行,这引入了一些开销并且没有多大意义(这篇文章很好地解释了问题并且得出结论TCP多路复用是愚蠢的).他们所有人都感觉很胖,我更喜欢小而轻的东西(ZeroMQ遗憾的是,没有实现多路复用.这让我想到是否使用UDP是一种选择.当然,必须正确地实现恢复和ACK之类的东西,但是通过连接知道有关多个流的知识应该比简单地使用TCP更有效.
你认为我上面的推理是正确的,还是我错过了一些重要的东西?有没有好的C/C++库通过UDP实现多路复用?
我正在用C++编写一个智能指针实现,而且我在使用const-correctness方面遇到了一些麻烦.以下是代码的摘录:
template <class T> class Pointer {
T* pointee;
public:
Pointer(const Pointer<T>& other) { // must be const Pointer& for assignments
pointee = other.getPointee();
}
T* getPointee() const {
return pointee;
}
};
Run Code Online (Sandbox Code Playgroud)
这是一种方法,但是我感到不安的是const会员没有返回const指针.另一种可能性是getPointee()返回a const T*并const_cast<T*>在复制构造函数中执行a .
有没有更好的方法呢?如果没有,你认为哪个是较小的邪恶,返回一个非常数或做一个const_cast?
当使用jQuery.load动态加载HTML内容到网页时,"重新绑定"任何处理程序的最佳方法是什么?
通常你绑定处理程序jQuery.ready,但它们显然不适用于新加载的内容.这适用于在加载内容的外部和内部使用的处理程序,因此只是在load成功函数中绑定它们并不是很好.
c++ ×7
c++11 ×2
casting ×2
xml ×2
ajax ×1
c ×1
cmake ×1
cocoa ×1
const ×1
constants ×1
constructor ×1
gcc ×1
javascript ×1
jquery ×1
jquery-load ×1
lldb ×1
makefile ×1
multiplexing ×1
networking ×1
objective-c ×1
pthreads ×1
ruby ×1
schema ×1
xsd ×1