小编gui*_*ini的帖子

具有相同名称但参数类型不同的多个函数作为模板参数

我正在使用xsd从xml架构文件创建c ++代码.对于xml类型,创建了多个函数(用于序列化等).
如果类型被称为XmlType,则创建以下形式的多个函数:

XmlType XmlType_(const XmlType& a, const string& b)
string XmlType_(const XmlType& a)
...
Run Code Online (Sandbox Code Playgroud)

这是普通函数,而不是XmlType的成员,它们都具有相同的名称.对于XmlType2,函数将被称为XmlType2_.

我想为我的xml方案的所有不同xml类型编写一个实用程序模板类.不同的功能将在本课程中被称为洞察力.到目前为止我所拥有的是这样的:

template<typename T>
using TFunc1 = T (*)(const T&, const string&);
template<typename T>
using TFunc2 = string (*)(const T&);

template<typename T, TFunc1<T> func2, TFunc2<T> func2>
class XmlUtil {
... 
}; 
Run Code Online (Sandbox Code Playgroud)

当创建XmlUtil类的实例时,如果必须这样做:

XmlUtil<XmlType, XmlType_, XmlType_> util; 
Run Code Online (Sandbox Code Playgroud)

当我必须传递更多函数作为参数时,这感觉有点多余并且变得更糟.

我想像这样使用util类:

XmlUtil<XmlType, XmlType_> util; 
Run Code Online (Sandbox Code Playgroud)

或者甚至更好

XmlUtil<XmlType> util; 
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一方法是以某种方式使用define,但感觉不对.
还有其他办法吗?

编辑: 我现在正在使用一个定义:

#define TRPL(name) name, name ## _, name …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

5
推荐指数
1
解决办法
3844
查看次数

容器模板参数的Value_type

在今年的主题演讲中,Going Native C++的本质(转到40:30)Bjarne Stroustrup给出了以下代码示例:

template<typename C, typename V>
vector<Value_type<C>*> find_all(C& cont, V v) 
{
    vector<Value_type<C>*> res; 

    for (auto& x : cont) 
        if (x == v) 
            res.push_back(&x)

    return res;
}
Run Code Online (Sandbox Code Playgroud)

此函数用于查找容器中所有值的值,并返回指向找到的元素的指针.视频中的示例:

string m{"Mary had a little lamb"}; 
for (const auto p: find_all(m,'a')) // p is a char*
    if (*p != 'a')
        cerr << "string bug!\n"; 
Run Code Online (Sandbox Code Playgroud)

我的问题是关于Value_Type<C>*.标准库中有这样的东西吗?我寻找它并没有找到它.如果它不在std中,怎么能实现呢?

c++ std

5
推荐指数
1
解决办法
3597
查看次数

命令模式下的缩进宽度

我在Windows 7上使用Vim 7.3并在我的vimrc中进行以下设置:

set expandtab
set tabstop=4
set shiftwidth=4
set softtabstop=4
Run Code Online (Sandbox Code Playgroud)

如果我在'插入模式'中使用Tab或在'命令模式'中使用>>,我的文本缩进4个空格.但是如果我在'冒号命令模式'中使用>>(我不知道它是否真的被称为),例如使用范围

:30,35>> 
Run Code Online (Sandbox Code Playgroud)

文本仍然缩进8个空格.

将此更改为4个空格的正确设置是什么?

vim

1
推荐指数
1
解决办法
145
查看次数

标签 统计

c++ ×2

c++11 ×1

std ×1

vim ×1