如何在设置字符串值时优化函数调用? [关闭]

Posted

技术标签:

【中文标题】如何在设置字符串值时优化函数调用? [关闭]【英文标题】:How can I optimize function calls while setting the string values? [closed] 【发布时间】:2019-08-20 09:34:26 【问题描述】:

在下面的代码 sn-p 中,我从 ReadFile() 函数调用 SetParams()Execute() 多次。 我可以通过单个调用优化每个 SetParams()Execute() 吗?

bool SubscriptionRead::ReadFile()

    IVerification* pReader = new FileReader();
    std::wstring oemPathPublicKey(oemFolderPath)
        , oemPathSessionKey(oemFolderPath)
        , oemPathUserChoices(oemFolderPath);
    oemPathPublicKey.append(PUBLIC_KEY_FILE);
    oemPathSessionKey.append(SESSION_KEY_FILE);
    oemPathUserChoices.append(USERCHOICES_FILE);
    pReader->SetParams((wchar_t*)oemPathPublicKey.c_str(), L"file");
    pReader->Execute();
    pReader->SetParams((wchar_t*)oemPathSessionKey.c_str(), L"file");
    pReader->Execute();
    pReader->SetParams((wchar_t*)oemPathUserChoices.c_str(), L"file");
    pReader->Execute();
    return True;


void FileReader::SetParams(wchar_t* wszParams, wchar_t* wszParamType)

    m_wszParamType = wszParamType;
    m_wszParams = wszParams;


bool FileReader::Execute()

    if (wcscmp(m_wszParamType, L"registry") == 0)
    
        function1();
    
    else
    
        function2();
    
    return true;

【问题讨论】:

也许可以解释为什么你认为你不能,因为不清楚是什么问题 是什么阻碍了您创建另一个在单个调用中执行此操作的函数? 将需要的参数直接传递给Execute(),而不是使用其他函数来设置它们。如果您想将多个 Execute() 调用合并为一个,请更改参数,使其接受多对参数,或接受数组参数。还可以考虑使用标准库类型(如std::wstring,或者,如果传递一组,std::vector<std::wstring>)而不是使用wchar_t 的数组。 老实说,我认为这很好。如果您还有更多要添加的内容,请担心。 【参考方案1】:

如果您的问题是在不同的行中调用具有不同参数的函数,您可以使用std::ref 如下迭代引用包装器的initializer_list 到对象(即std::wstring s ),这减少了一些打字:

#include <functional>        // std::ref
#include <initializer_list>  // std::initializer_list

bool SubscriptionRead::ReadFile()

    IVerification* pReader = new FileReader();  
    // .... other code
    for(auto strKey: std::ref(oemPathPublicKey), std::ref(oemPathSessionKey), std::ref(oemPathSessionKey))
    
        pReader->SetParams((wchar_t*)strKey.c_str(), L"file");
        pReader->Execute(); // does it needed to executed for every path? if no: outside the loop!
    
    return True;


还要注意,在现代 C++ 中,您有 smart pointers。因此,请在适当的时候使用它们,并避免手动分配内存。

【讨论】:

以上是关于如何在设置字符串值时优化函数调用? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

函数要返回两个值时,主函数的接收要怎么做

对象做函数参数和函数返回值时,调用复制构造函数,构造函数,析构函数的情况

当分布中有异常值时,我应该如何使用 `mean` 函数? [关闭]

表达式不能作为函数调用:错误[关闭]

如何在 js 字符串模板文字中调用带参数的函数? [关闭]

None还可以是函数定义可选参数的一个默认值,设置成默认值时实参在调用该函数时可以不输入与None绑定的元素