我想在一列中对齐所有C++类成员名称(不要与成员类型混淆).
让我们看一下入口处的例子:
class Foo
{
public:
void method1( );
int method2( );
const Bar * method3( ) const;
protected:
float m_member;
};
Run Code Online (Sandbox Code Playgroud)
这就是我们最终想要拥有的东西:
class Foo
{
public:
void method1( );
int method2( );
const Bar * method3( ) const;
protected:
float m_member;
};
Run Code Online (Sandbox Code Playgroud)
因此,最长的成员类型声明定义了类成员名称将对齐的列.我如何在emacs中执行此类转换?
我遇到了问题:使用struct时有初始化程序但类型不完整:
在一个hpp文件中:
class A
{
private:
struct videoDT;
};
Run Code Online (Sandbox Code Playgroud)
在cpp文件中:
struct A::videoDT
{
videoDT(int b) : a(b){}
int a;
};
void test()
{
struct videoDT test(1);
}
Run Code Online (Sandbox Code Playgroud)
然后我有问题:
错误:有初始化程序但类型不完整
提前致谢
是(++i)++未定义的行为?在检索增量对象以进行后缀增量操作后,是否可能发生前缀增量的副作用?这对我来说似乎很奇怪.
我的直觉是,这在C++ 03中是未定义的,在C++ 11中定义良好.我对吗?
c++ undefined-behavior sequence-points language-lawyer c++11
书C++模板:完整指南在第275页有一个例子,我无法绕过头脑.
引用书中的摘录......
template <typename T>
class Promotion<T,T> {
public:
typdef T ResultT;
};
template<typename T1, typename T2>
class Promotion<Array<T1>, Array<T2> > {
public:
typedef Array<typename Promotion<T1,T2>::ResultT> ResultT;
};
template<typename T>
class Promotion<Array<T>, Array<T> > {
public:
typedef Array<typename Promotion<T,T>::ResultT> ResultT;
};
Run Code Online (Sandbox Code Playgroud)
不幸的是,部分专业化
Promotion<Array<T1>, Array<T2> >既不比专业化更专业化也更不专业化Promotion<T,T>.为避免模板选择模糊,添加了最后的部分特化.它比前两个部分特化中的任何一个都更专业.
为什么前两个模板不明确,为什么最后一个模板解决了模糊问题?当我尝试应用规则时,我或者无法弄清楚它是如何产生歧义的,或者如果我认为我有办法让它发生,我不知道为什么最后一个模板解决了问题.
我试图让 Jenkins 使用 scp 插件将构建的工件复制到另一台服务器上的存档目录。
理想情况下,我希望能够根据构建版本使目标动态化,因此结果类似于 /builds/<build version>/
对于像 1.2.3.4 这样的构建版本,它看起来像:
/builds/1.2.3.4/
Run Code Online (Sandbox Code Playgroud)
从阅读 scp 插件页面来看,这看起来不太可能,但我认为这里的某个人可能已经想通了。
有没有办法做到这一点?
将带有嵌入在文件名中的版本号的工件放在一个目录中是否更好?
build-automation build-process hudson hudson-plugins jenkins
我有一个C++项目,设置为/clr,在同一解决方案中由C#项目引用.不幸的是,似乎C++没有正确签名,导致错误消息"程序集没有强名称".(sn.exe同意该错误.)
然而,就是在项目设置(链接/高级)的SNK文件,因此它应该签署.此外,所有项目设置似乎与同一解决方案中的另一个C++项目相同 - 一切正常.
我将头发撕裂了几个小时后发现的一件事:
当取消/NOLOGO链接器的开关时,很明显连接器被调用两次.我没有丝毫想到为什么会这样.
现在,在作品的链接被传递的命令行(SNK文件的项目/KEYFILE:的)都调用,在一个,它不工作,第二次调用并没有获得通过的SNK文件.
为什么要调用链接器两次?是什么决定它不会在第二次调用中传递snk文件?
注意:这是GCC 4.1.2.我们是专有的嵌入式平台.我们无法更新到新的编译器.所以C++ 03 + TR1就是.
我们某处有这样的功能:
template<typename T>
void foo(const boost::any& x)
{
bar(boost::any_cast<T>(x));
}
Run Code Online (Sandbox Code Playgroud)
然后在绑定表达式中使用它:
std::tr1::bind( &foo<T>, _1);
Run Code Online (Sandbox Code Playgroud)
这会生成以下错误:
error: call of overloaded 'ref(const boost::any&)' is ambiguous
note: candidates are: std::tr1::reference_wrapper<_Tp> std::tr1::ref(_Tp&) [with _Tp = const boost::any]
note: const boost::reference_wrapper boost::ref(T&) [with T = const boost::any]
我确实理解这是Koenig查找命中我们.但是,我缺乏关于如何规避这个问题的想法.
有谁在那里?
我们有一个ActiveMQ代理,它使用JMS,AMQP和MQTT从非常不同的客户端连接.出于某种原因,我们还没有发现一组特定的MQTT客户端经常(并非总是)持久订阅.这是一个经常添加和删除客户端的测试环境,后者有时通过拔插头或重新启动嵌入式设备,因此无法正确取消订阅.效果(IIUC)是经纪人为可能再也看不到的设备堆积"离线持久订阅"(我可以在http:// my_broker:8161/admin/subscribers.jsp下看到这些),保留有关这些主题的消息永远,直到它最终在自己的记忆足迹下崩溃.
这里的问题是订阅者持续订阅,我们需要找出原因.但是,也有人决定这样做(不知不觉中)的客户不应该让经纪人停下来,所以我们需要独立解决这个问题.
我发现有脱机持久订阅的超时设置,并将它们放入我们的代理配置(最后两行):
<broker
xmlns="http://activemq.apache.org/schema/core"
brokerName="my_broker"
dataDirectory="${activemq.data}"
useJmx="true"
advisorySupport="false"
persistent="false"
offlineDurableSubscriberTimeout="1800000"
offlineDurableSubscriberTaskSchedule="60000">
Run Code Online (Sandbox Code Playgroud)
如果我理解正确的话,上面应该检查每一分钟并解雇他们半小时没见过的客户.然而,与文档相反,这似乎不起作用:我已订阅并在几天前拔掉插件的消费者仍然可以在脱机持久订阅者列表中看到,经纪人的内存占用量不断增加,如果我在代理的Web界面中手动删除订阅者我可以看到内存占用量下降.
所以这是我的问题:
使用sizeof运算符,我可以确定任何类型的大小 - 但是如何在运行时动态确定多态类的大小?
例如,我有一个指向a的指针Animal,我想得到它指向的实际对象的大小,如果它是a Cat或a ,它将是不同的Dog.有没有一种简单的方法可以做到这一点,缺少创建虚拟方法Animal::size并重载它以返回sizeof每种特定类型?