C++ 我可以简化这个std::列表的填充吗?

C++ 我可以简化这个std::列表的填充吗?,c++,visual-c++,stdlist,C++,Visual C++,Stdlist,我可以简化我的std::listcode: void CMeetingScheduleAssistantApp::InitBrowserRegistryLookupList(注册表路径列表和rListRegPaths) { S_注册表_路径sRegPath; //重新设置列表 rListRegPaths.clear(); //这些将是“本机”32位或本机64位浏览器(即操作系统位) sRegPath.hRootKey=HKEY_LOCAL_MACHINE; sRegPath.strKeyPath

我可以简化我的
std::list
code:

void CMeetingScheduleAssistantApp::InitBrowserRegistryLookupList(注册表路径列表和rListRegPaths)
{
S_注册表_路径sRegPath;
//重新设置列表
rListRegPaths.clear();
//这些将是“本机”32位或本机64位浏览器(即操作系统位)
sRegPath.hRootKey=HKEY_LOCAL_MACHINE;
sRegPath.strKeyPath=\u T(“软件\\Microsoft\\Windows\\CurrentVersion\\App Path\\firefox.exe”);
sRegPath.strBrowser=_T(“Firefox”);
RLIStregpath.向后推(sRegPath);
sRegPath.hRootKey=HKEY_LOCAL_MACHINE;
sRegPath.strKeyPath=\u T(“软件\\Microsoft\\Windows\\CurrentVersion\\App path\\IEXPLORE.EXE”);
sRegPath.strBrowser=_T(“Internet Explorer”);
RLIStregpath.向后推(sRegPath);
sRegPath.hRootKey=HKEY_LOCAL_MACHINE;
sRegPath.strKeyPath=\u T(“软件\\Microsoft\\Windows\\CurrentVersion\\App path\\chrome.exe”);
sRegPath.strBrowser=_T(“谷歌浏览器”);
RLIStregpath.向后推(sRegPath);
sRegPath.hRootKey=HKEY\u当前用户;
sRegPath.strKeyPath=\u T(“软件\\Microsoft\\Windows\\CurrentVersion\\App Path\\opera.exe”);
sRegPath.strBrowser=_T(“Opera互联网浏览器”);
RLIStregpath.向后推(sRegPath);
//这些将是32位浏览器(在64位操作系统上)
如果(IsOS(OS_WOW6432))
{
sRegPath.hRootKey=HKEY_LOCAL_MACHINE;
sRegPath.strKeyPath=\u T(“软件\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\App path\\firefox.exe”);
sRegPath.strBrowser=_T(“Firefox”);
RLIStregpath.向后推(sRegPath);
sRegPath.hRootKey=HKEY_LOCAL_MACHINE;
sRegPath.strKeyPath=\u T(“软件\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\App path\\IEXPLORE.EXE”);
sRegPath.strBrowser=_T(“Internet Explorer”);
RLIStregpath.向后推(sRegPath);
sRegPath.hRootKey=HKEY_LOCAL_MACHINE;
sRegPath.strKeyPath=\u T(“软件\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\App path\\chrome.exe”);
sRegPath.strBrowser=_T(“谷歌浏览器”);
RLIStregpath.向后推(sRegPath);
}
}
更新
RegPathlist
的定义:

typedef struct tagRegistryPath
{
    HKEY hRootKey;
    CString strBrowser;
    CString strKeyPath;

} S_REGISTRY_PATH;
using RegistryPathList = list<S_REGISTRY_PATH>;
typedef结构标记注册表路径
{
HKEY hRootKey;
CString strBrowser;
CString strKeyPath;
}S_注册表_路径;
使用RegistryPathList=list;

您可能希望修改您的元素,这样可以加快并“简化”(主观术语)您的代码。例如:

rListRegPaths.emplace_back(
      HKEY_LOCAL_MACHINE, 
      _T("SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\App Paths\\firefox.exe"),
      _T("Firefox"));

您可能希望修改您的元素,这样可以加快并“简化”(主观术语)您的代码。例如:

rListRegPaths.emplace_back(
      HKEY_LOCAL_MACHINE, 
      _T("SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\App Paths\\firefox.exe"),
      _T("Firefox"));

您可以通过使用参数构造来缩短它

typedef结构标记注册表路径
{
HKEY hRootKey;
CString strBrowser;
CString strKeyPath;
}S_注册表_路径;
rListRegPaths.向后推_(S_注册表_路径{
HKEY_本地_机器,
_T(“软件\\Microsoft\\Windows\\CurrentVersion\\App path\\firefox.exe”),
_T(“Firefox”)
});

您可以通过使用参数构造使其变短

typedef结构标记注册表路径
{
HKEY hRootKey;
CString strBrowser;
CString strKeyPath;
}S_注册表_路径;
rListRegPaths.向后推_(S_注册表_路径{
HKEY_本地_机器,
_T(“软件\\Microsoft\\Windows\\CurrentVersion\\App path\\firefox.exe”),
_T(“Firefox”)
});

您可以使用初始值设定项列表构造函数和
推回

struct RegistryPath {
    HKEY hRootKey;
    TCHAR const* strBrowser;
    TCHAR const* strKeyPath;
};

int main() {
    std::list<RegistryPath> sRegPath = {
        {HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\firefox.exe"), _T("Firefox")},
        {HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\IEXPLORE.EXE"), _T("Internet Explorer")}
        // ...
    };
    if(IsOS(OS_WOW6432)) {
        sRegPath.push_back({HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\firefox.exe"), _T("Firefox")});
        // ...
    }
}
struct注册表路径{
HKEY hRootKey;
TCHAR const*strBrowser;
TCHAR const*strKeyPath;
};
int main(){
std::list sRegPath={
{HKEY_LOCAL_MACHINE,_T(“软件\\Microsoft\\Windows\\CurrentVersion\\AppPath\\firefox.exe”),_T(“firefox”)},
{HKEY_LOCAL_MACHINE,_T(“软件\\Microsoft\\Windows\\CurrentVersion\\AppPath\\IEXPLORE.EXE”),_T(“Internet Explorer”)}
// ...
};
如果(IsOS(OS_WOW6432)){
sRegPath.push_back({HKEY_LOCAL_MACHINE,{u T(“软件\\Microsoft\\Windows\\CurrentVersion\\App path\\firefox.exe”),{u T(“firefox”)});
// ...
}
}

请注意,我将
CString
替换为
TCHAR const*
,以避免内存分配和复制字符串。

您可以使用初始值设定项列表构造函数和
推回

struct RegistryPath {
    HKEY hRootKey;
    TCHAR const* strBrowser;
    TCHAR const* strKeyPath;
};

int main() {
    std::list<RegistryPath> sRegPath = {
        {HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\firefox.exe"), _T("Firefox")},
        {HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\IEXPLORE.EXE"), _T("Internet Explorer")}
        // ...
    };
    if(IsOS(OS_WOW6432)) {
        sRegPath.push_back({HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\firefox.exe"), _T("Firefox")});
        // ...
    }
}
struct注册表路径{
HKEY hRootKey;
TCHAR const*strBrowser;
TCHAR const*strKeyPath;
};
int main(){
std::list sRegPath={
{HKEY_LOCAL_MACHINE,_T(“软件\\Microsoft\\Windows\\CurrentVersion\\AppPath\\firefox.exe”),_T(“firefox”)},
{HKEY_LOCAL_MACHINE,_T(“软件\\Microsoft\\Windows\\CurrentVersion\\AppPath\\IEXPLORE.EXE”),_T(“Internet Explorer”)}
// ...
};
如果(IsOS(OS_WOW6432)){
sRegPath.push_back({HKEY_LOCAL_MACHINE,{u T(“软件\\Microsoft\\Windows\\CurrentVersion\\App path\\firefox.exe”),{u T(“firefox”)});
// ...
}
}

请注意,我将
CString
替换为
TCHAR const*
,以避免内存分配和复制字符串。

您可以使用不同的浏览器创建数组,如下所示:

S_注册表_路径本机[]={
{HKEY_LOCAL_MACHINE,_T(“软件\\Microsoft\\Windows\\CurrentVersion\\AppPath\\firefox.exe”),_T(“firefox”)},
//...
}
S_注册表_路径wow64[]={
{HKEY_LOCAL_MACHINE,_T(“软件\\Microsoft\\Windows\\CurrentVersion\\AppPath\\firefox.exe”),_T(“firefox”)},
//...
}
这甚至可以是一个单独的文件,甚至是自动生成的,您只需将其包含在实现该方法的文件中即可。 然后在方法内部,您所要做的就是:

void CMeetingScheduleAssistantApp::InitBrowserRegistryLookupList(注册表路径列表和rListRegPaths)
{
rListRegPaths.clear();
用于(自动和it:本机){
rligpaths。将_向后推(*it);
}
如果(IsOS(OS_WOW6432)){
用于(自动和it:wow64){
rligpaths。将_向后推(*it);
}
}
}