gpt4 book ai didi

c++ - 将类似的功能代码组合到模板中

转载 作者:太空宇宙 更新时间:2023-11-04 14:13:04 25 4
gpt4 key购买 nike

我必须编写以下类型的代码

if ( itr->second == "char" ) 
{
MemberProperty<Owner,char> *ptr = (MemberProperty<Owner, char> *)GetterSetterItr->second;
pw->writeChar(itr->first.c_str() ,(pOwner->*(ptr->m_Getter))());
} else if ( itr->second == "wchar" ) {
MemberProperty<Owner,wchar_t> *ptr = (MemberProperty<Owner, wchar_t> *)GetterSetterItr->second;
pw->writeWideChar(itr->first.c_str() ,(pOwner->*(ptr->m_Getter))());
}

将会有很多类型,是否有任何 c++ 技巧,最好是模板技巧,将其减少为对此类代码的一次调用。

最佳答案

假设 writeChar() 和 writeWideChar() 除了参数类型之外是相同的,您可以像这样重构您的代码:

if (it->second == "char")
pw->writeChar<char>(itr->first, GetterSetterItr->second);
else if (itr->second == "wchar")
pw->writeChar<wchar_t>(itr->first, GetterSetterItr->second);

然后在*pw为实例的类中,将writeChar和writeWideChar替换为模板成员函数:

template <typename CharType>
void writeChar(std::string str, /*the type of GetterSetterItr->second*/ arg) {
MemberProperty<Owner, CharType> *ptr = (MemberProperty<Owner, CharType>*)arg;
// the rest of code of old writeChar() and writeWideChar()
}

关于c++ - 将类似的功能代码组合到模板中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13228766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com