我正在尝试调试一种方法,该方法除了其他方面之外,还将项添加到方法本地的列表中.
但是,每隔一段时间,列表大小就会被设置为零"中游".我想设置调试器在列表大小变为零时中断,但我不知道如何,并且会欣赏有关如何执行此操作的任何指针.
谢谢.
"未来某个时候有软件产品的计划,我想知道设计软件产品的最佳方法.架构(即组件之间的组件和关系)首先还是GUI?
谢谢.
在下面的代码中,Foo<T>::setValue适用于我的目的,除非在哪里T是一个名为TYPEeg Bar::TYPE和的枚举类Baz:TYPE.
因此,我会很感激,专门帮助Foo<T>::setValue不点名Bar和Baz,因为可能有几十个这样的类.
class Bar
{
public:
enum TYPE{ ONE , TWO };
};
class Baz
{
public:
enum TYPE{ SIX , TEN };
};
template<typename T>
class Foo
{
public:
void setValue(){} // Need a different setValue if T is a class enum
private:
T m_value;
};
int main()
{
Foo<int> f1;
Foo<Bar::TYPE> f2;
Foo<Baz::TYPE> f3;
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud) 我有一个全局函数将一个对象(或类型Source)的相关位复制到另一个(类型Target),如下所示:
template<typename Source , typename Target>
void partialCopy( Source& source , Target& target )
{
// perform copy
}
Run Code Online (Sandbox Code Playgroud)
我发现全局函数的问题在于,与成员函数不同,编码两个参数中的哪一个是源,哪个是目标时,不能立即清楚.因此,我想partialCopy()在每个类中都有一个成员函数,如下所示:
struct Foo
{
template<typename T>
void partialCopy( T& target )
{
::partialCopy( *this , target );
}
};
Run Code Online (Sandbox Code Playgroud)
现在的问题是必须将成员函数复制到几十个类.这是一个可以容忍的复制和粘贴编程案例吗?我已经考虑过放入partialCopy一个头文件partialCopy.h并使用预处理器include将它'注入'到每个类中,如下所示:
struct Foo
{
#include "partialCopy.h"
};
Foo f;
Bar b;
f.partialCopy( b );
Run Code Online (Sandbox Code Playgroud)
虽然这是有效的,但我从未在任何地方看到它,也不知道它是否不可接受.
我已经尝试将partialCopy成员函数放在公共基类中并继承它但这不起作用,因为this关键字将引用基类而不是派生类.
还有更好的选择吗?请指教.
编辑
我static_cast在一个CRTP基类中对派生类执行a的John的建议(在一个被删除的线程中)可以很好地工作.@John请发一个答案,我会这样标记.
将指向派生类的方法的指针强制转换为指向基类方法的指针是合法的,即使基类没有声明任何方法,尤其是"casted"方法通过类型基类的对象调用,如下:
// works in VS 2008 and g++ 4.5.3
struct Base
{
};
struct Fuu : public Base
{
void bar(){ std::cout << "Fuu::bar" << std::endl; }
void bax(){ std::cout << "Fuu::bax" << std::endl; }
};
struct Foo : public Base
{
void bar(){ std::cout << "Foo::bar" << std::endl; }
void bax(){ std::cout << "Foo::bax" << std::endl; }
};
typedef void (Base::*PtrToMethod)();
int main()
{
PtrToMethod ptr1 = (PtrToMethod) &Foo::bax;
PtrToMethod ptr2 …Run Code Online (Sandbox Code Playgroud) 我很欣赏一个如何使用的例子boost::sort(我正在尝试对一个定制的对象容器进行排序,因此无法使用std::sort).文档中的示例非常少; 此外,我找不到任何有关如何创建的信息RandomAccessRange.
下面的代码,其中函数定义预先声明其声明,在VS .NET 2008和Cygwin gcc 4.8.2中编译.这合法吗?
namespace N
{
int init() // Definition appears first
{
return 42;
}
}
namespace N
{
int init(); // followed by declaration
const int x = init();
}
int main()
{
}
Run Code Online (Sandbox Code Playgroud)
编辑
我想这与下面的编译并没有太大区别
void foo()
{
}
void foo();
int main()
{
}
Run Code Online (Sandbox Code Playgroud) 我很难将指向成员函数的指针传递给Outer<T>::foo嵌套类的构造函数,Outer如下所示(另请参见ideone).
template<typename T1>
struct Outer
{
void foo()
{
}
Outer() : inner( &Outer::foo ) // ERROR: compiles without &Outer::foo and Inner( F f ), below
{
}
template<typename T2, void (T2::*F)()>
struct Inner
{
Inner( F f ) // ERROR
{
}
};
Inner<Outer,&Outer::foo> inner;
};
int main()
{
Outer<int> outer;
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我开始怀疑这是否可能.
以下代码包含operator<<MSVC 2008和gcc 4.6.3上的编译重载.这合法吗?
#include <iostream>
struct Foo
{
friend Foo operator<<( std::ostream& stream , Foo& foo );
Foo operator<<( std::ostream& stream )
{
return *this;
}
};
Foo operator<<( std::ostream& stream , Foo& foo )
{
return foo;
}
int main()
{
}
Run Code Online (Sandbox Code Playgroud) 奇怪的是,我c在一个switch语句中初始化了以下数组,完全期望我的编译器说不,你不能这样做,但令我惊讶的是它在MSVC,GCC和Clang编译.在线示例
我假设标准允许它,在这种情况下我的问题是为什么?...考虑到case语句中不允许声明和初始化非数组.
int main()
{
char ch;
switch( ch )
{
case 'x':
//int a = 42; // NOT OKAY
break;
case 'y':
int b;
b = 42; // OKAY
case 'z':
int c[2] = { 0 , 1 }; // OKAY (Huh???)
break;
};
}
Run Code Online (Sandbox Code Playgroud) c++ ×9
templates ×3
architecture ×1
arrays ×1
boost ×1
c ×1
debugging ×1
namespaces ×1
nested-class ×1
ostream ×1
refactoring ×1
sorting ×1
stl ×1