我现在已经搜索了一段时间,似乎没有人遇到我的问题.我已经设置了vim以使用我喜欢的colorscheme并且它完全正常工作,直到我打开一个有交换的文件.我得到了通常的消息,询问我是否要删除它,只读或恢复它.我选择了恢复,在这样做后,我无法获得那个文件来显示我想要的颜色.
我尝试了通常的语法:on,重新加载.vimrc以及获取高亮所需的每个正常步骤.奇怪的是,这个问题仅存在于这个文件中,当它在我恢复交换的目录中时.我打开的任何其他文件都有正常的颜色,如果我重命名麻烦的文件或将其放在另一个目录中,它会加载颜色.
我认为vim必须在某处存放它的路径,但我不知道在哪里.我尝试删除.viminfo,但没有做任何事情.任何输入都非常感谢.
我正在研究C++中的一些简单的位操作问题,并在尝试可视化我的步骤时遇到了这个问题.我知道分配给不同基元类型的位数可能因系统而异.对于我的机器,sizeof(int)
输出4
,所以我的char
价值有4 位.我现在也知道一个字节的定义通常是8位,但不一定是这种情况.当我输出CHAR_BIT
我得到8
.因此,我希望我的int
值总共有32位.
然后我可以继续将我的二进制值打印int
到屏幕上:
int max=~0; //All my bits are turned on now
std::cout<<std::bitset<sizeof(int)*CHAR_BIT>(max)<<std::endl;
$:11111111111111111111111111111111
Run Code Online (Sandbox Code Playgroud)
如果我想要,我可以增加bitset大小:
int max=~0;
std::cout<<std::bitset<sizeof(int)*CHAR_BIT*3>(max)<<std::endl;
$:000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111
Run Code Online (Sandbox Code Playgroud)
为什么有这么多?我本来期望只有32个,用零填充.相反,有两倍,发生了什么?
当我重复实验unsigned int
,其大小相同时int
,额外的实验不会出现:
unsigned int unmax=~0;
std::cout<<std::bitset<sizeof(unsigned int)*CHAR_BIT*3>(unmax)<<std::endl;
$:000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111
Run Code Online (Sandbox Code Playgroud) 我想编写一个模板函数,它迭代一个容器std::pair
并返回一个模板化的值,两个类型都在该对中.我已经std::map
按照以下方式工作:
template <typename T1, typename T2>
std::pair<std::vector<T1>, std::vector<T2>> unzip(const std::map<T1,T2>& zipped)
{
auto unzipped = std::make_pair(std::vector<T1>(), std::vector<T2>());
for (auto& one_two : zipped)
{
unzipped.first.push_back(one_two.first);
unzipped.second.push_back(one_two.second);
}
return unzipped;
}
Run Code Online (Sandbox Code Playgroud)
这很好,但它限制了容器std::map
.我想要完成的是让它也适用于类似的东西std::vector<std::pair<T1,T2>>
,因为两个容器上的迭代以相同的方式工作.
我试图通过更改模板参数使容器成为模板:
template <typename T1, typename T2, template<typename ... Types> class Container>
std::pair<std::vector<T1>, std::vector<T2>> unzip(const Container<T1,T2>& zipped)
{
//do stuff and return
}
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,如果不使用,则扣除失败std::map
因为std::vector
仅取决于单一类型.然后我尝试了更多的创意,但编译器只是抱怨更多:
template <typename PairContainerType>
std::pair<std::vector<typename PairContainerType::value_type::first_type>,
std::vector<typename PairContainerType::value_type::second_type>>
unzip(const PairContainerType& zipped)
{
typedef typename PairContainerType::value_type::first_type T1; …
Run Code Online (Sandbox Code Playgroud) 我有以下代码在 c++20 中执行我想要的操作:
#include <iostream>
struct IntContainer
{
int value;
constexpr IntContainer(int init):value(init)
{
if(std::is_constant_evaluated())
{
value*=2;
}
else
{
std::cout<<"Constructed at runtime"<<std::endl;
}
}
};
int main()
{
constexpr int fixed=99;
int runtime;
std::cout<<"Enter runtime int value"<<std::endl;
std::cin>>runtime;
constexpr IntContainer fixed_container(fixed);
IntContainer runtime_container(runtime);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对于fixed
整数值,它默默地构造我的容器并将该值加倍,对于整runtime
数值,它使用详细构造。该实现允许我声明fixed_container
为constexpr
.
我必须使用 c++20 才能使用该std::is_constant_evaluated
功能,但我仅限于 c++17。是否有一些聪明的模板魔法我可以用来在没有此功能的情况下保持相同的行为?
我喜欢通过TagHighlight插件在vim中使用我的语法,它使用丰富的ctags生成vim用于语法的标记文件.
直到最近,我只是使用常规的枚举类型,如
enum count {ONE, TWO, THREE};
哪个被正确标记了.我的小组最近决定支持c ++ 11,我试过了
enum class count {ONE, TWO, THREE};
枚举"count"现在被标记为类而不是枚举,"ONE"和"TWO"被标记为类成员,"THREE"根本没有被标记.
我试图
--regex-c++=/^[ \t]*(enum)[ \t]+(class)[ \t]+([a-zA-Z0-9_]+)/\3/e,enum/
用作正则表达式,但没有成功.似乎枚举类应该是从中生成ctags的标准类型,但是没有发现任何人抱怨它.我愚蠢地忽略了一些简单的东西吗?
ctags-exuberant --version
Exuberant Ctags 5.9~svn20110310, Copyright (C) 1996-2009 Darren Hiebert
Compiled: Sep 29 2014, 16:06:25
Addresses: <dhiebert@users.sourceforge.net>, http://ctags.sourceforge.net
Optional compiled features: +wildcards, +regex
还可以理解在vim中自定义语法突出显示的替代方法.