非常基本的问题,我正在尝试在Vim中编写一个正则表达式来匹配任何短语,"abc "然后直接跟着除了之外的任何其他短语"defg".
我习惯于"[^defg]"匹配除d,e,f或g之外的任何单个字符.
我的第一直觉是尝试/abc [^\(defg\)]或者/abc [^\<defg\>]两者都没有.
给定模板化函数,如下所示:
template<class T>
int Function(T object);
Run Code Online (Sandbox Code Playgroud)
用户可以通过指定模板化类型来调用此函数,如下所示:
int result = Function<float>(100.f); // Valid
Run Code Online (Sandbox Code Playgroud)
但是类型规范是可选的,因为编译器可以从提供的参数的类型推导出T的类型; 像这样:
int result = Function(100.f); // Also valid, the compiler deduced the type "float" from the literal's type
Run Code Online (Sandbox Code Playgroud)
假设我有点复杂,我想要一个这样的模板化值参数:
template<class T, T* object>
int Function();
Run Code Online (Sandbox Code Playgroud)
我可以这样调用我的函数:
static float val = 100.f;
// ...
int result = Function<float, &val>();
Run Code Online (Sandbox Code Playgroud)
我的问题是:有没有办法我强迫编译器根据参数类型和val来推断类型T?
我需要的是一种使以下代码有效的方法:
static float val = 100.f;
// ...
int result = Function<&val>();
Run Code Online (Sandbox Code Playgroud)
可以吗?
我在Windows上使用Perforce和Vim.我目前有一个自动命令设置为在更改时打开只读文件进行编辑:
au FileChangedRO * !p4 edit <afile>
Run Code Online (Sandbox Code Playgroud)
p4 edit在尝试编写 只读文件而不是编辑它时,有没有办法设置类似的auto命令来执行?
我想为此提供一个别名模板,std::unique_ptr以提供自己的删除功能。
unique_ptr 具有标量和数组实现,它们的定义如下:
template <class T, class D = default_delete<T>>
class unique_ptr // scalar
template <class T, class D>
class unique_ptr<T[], D> // array
Run Code Online (Sandbox Code Playgroud)
我在尝试覆盖的标量和数组版本时遇到麻烦unique_ptr。为一个版本创建别名很容易,如下所示:
template<class T>
struct Deleter {
void operator()(T* ptr) { delete ptr; }
};
template<class T>
using my_unique_ptr = std::unique_ptr<T Deleter<T>>;
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试添加第二个别名时,如下所示:
template<class T>
struct ArrayDeleter {
void operator()(T* ptr) { delete [] ptr; }
};
template<class T>
using my_unique_ptr = std::unique_ptr<T[], ArrayDeleter<T>>;
Run Code Online (Sandbox Code Playgroud)
...由于“ my_unique_ptr”含糊不清,我最终遇到编译器错误。
我的问题是:如何创建一个既适用于数组又适用于标量版本的别名unique_ptr?