我有一些自定义控件,我应该在其中创建单选按钮或复选框。子控件的计数仅在运行时可用(它加载一些从中获取此计数的文件)。所以我需要创建可变数量的控件。我应该使用哪个集合来实现此目的?
解决方案 1:只需使用std::vector<HWND>
(或CArray<HWND>
) - 不适合,因为我想使用 MFC (CButton)。当然,我可以Attach()
稍后在Detach()
每次需要此窗口时处理窗口,但这会带来很大的开销。
解决方案 2:使用std::vector<CButton*>
orCArray<CButton*>
或CList<CButton*>
or... 在这种情况下,当不需要控制时,我会注意创建“新”和适当的“删除”。我很健忘:)
MFC 句柄映射包含指向 CButton 的指针,我不能使用 simple CArray<CButton>
,因为每次当他的大小增加时,它都会移动我的对象。
...问题是:我应该使用哪个集合来包含 MFC 控件类的变量计数?
我有一些null结构,例如:
struct null_type
{
null_type& someNonVirtualMethod()
{
return *this;
}
};
Run Code Online (Sandbox Code Playgroud)
在某些功能中,我需要传递对此类型的引用.原因:
template <typename T1 = null_type, typename T2 = null_type, ... >
class LooksLikeATupleButItsNotATuple
{
public:
LooksLikeATupleButItsNotATuple(T1& ref1 = defParamHere, T2& ref2 = andHere..)
: _ref1(ref1), _ref2(ref2), ...
{
}
void someCompositeFunctionHere()
{
_ref1.someNonVirtualMethod();
_ref2.someNonVirtualMethod();
...
}
private:
T1& _ref1;
T2& _ref2;
...;
};
Run Code Online (Sandbox Code Playgroud)
使用空引用作为默认参数是一个好习惯吗?:
*static_cast<NullType*>(0)
Run Code Online (Sandbox Code Playgroud)
它适用于MSVC,但我有些疑惑......