我有一个Powershell脚本,可以读取管道中的值:
PARAM (
[Parameter(ValueFromPipeline = $true)]
$s
)
PROCESS {
echo "* $s"
}
Run Code Online (Sandbox Code Playgroud)
工作得很好:
PS> my.ps1 foo
*foo
我希望脚本具有默认值列表,因为最常见的用法将始终使用相同的值,并将它们存储在默认值中将是最方便的.我做了通常的任务:
PARAM (
[Parameter(ValueFromPipeline = $true)]
$s = 'bar'
)
PROCESS {
echo "* $s"
}
Run Code Online (Sandbox Code Playgroud)
再次,工作得很好:
PS> my.ps1
*bar
PS> my.ps1 foo
*foo
但是,当将默认值设置为列表时,我会得到一些完全合理但完全不符合我要求的内容:
PARAM (
[Parameter(ValueFromPipeline = $true)]
$s = @('bar', 'bat', 'boy')
)
PROCESS {
echo "* $s"
}
Run Code Online (Sandbox Code Playgroud)
结果:
PS> my.ps1
*棒蝙蝠男孩
我期望:
PS> my.ps1
*bar
*bat
*boy
如何为每个默认值调用Process循环?(这与在Process中调用一个,并将当前主体包装在一个大的foreach循环中超过$ s有所不同).
我有一个我认为是关于std :: vector类型的简单问题.基本问题很简单:我有一个函数将数据流读入缓冲区(以及获取缓冲区的大小),然后将该数据作为向量返回.uint8_t修复了集合元素的类型.我的问题是,是否有更好的方法来填充矢量而不是走缓冲区?
这是我天真的,难以理解的代码:
uint8_t* buffer;
size_t size;
stream->readBuffer(buffer, size); // I don't own the stream class
std::vector<uint8_t> output(size);
for (size_t i = 0; i < currentChunkLength; i++)
{
output.push_back(buffer[i]);
}
return output;
Run Code Online (Sandbox Code Playgroud) 考虑以下功能:
unique_ptr<char> f(const wstring key, const unsigned int length)
{
assert(length <= key.length());
const wstring suffix = key.substr(length, key.length() - length);
const size_t outputSize = suffix.length() + 1; // +1 for null terminator
char * output = new char[outputSize];
size_t charsConverted = 0;
const wchar_t * outputWide = suffix.c_str();
wcstombs_s(&charsConverted, output, outputSize, outputWide, suffix.length());
return unique_ptr<char>(output);
}
Run Code Online (Sandbox Code Playgroud)
这里的目的是接受一个wstring,length从最后选择字符,并将它们作为C样式的字符串返回,该字符串包含在unique_ptr中(根据另一个库的要求 - 我当然没有选择那种类型:)).
我的一位同事顺便说过,他认为这会泄漏记忆,但他没有时间详细说明,我也看不到.任何人都可以发现它,如果是这样解释我应该怎么解决它?我可能有我的眼罩.
请原谅这个简单的问题,但是我在理解指向集合的指针时遇到了麻烦。
想象一下,我有这个字节向量:
vector<uint8_t> n;
Run Code Online (Sandbox Code Playgroud)
我想将其存储在共享指针中。为什么需要(&)运算符的地址?
shared_ptr<vector<uint8_t>> m(&n);
Run Code Online (Sandbox Code Playgroud)
我认为构造函数会采用n。但是我也认为我对这里发生的事情有深刻的误解:)
DirectX 如何确定多边形缠绕顺序?我特别好奇背面剔除。通过研究,我发现 DX 计算表面法线并取其与相机矢量的点积,如果大于 0 则剔除。
首先,这是 DirectX 实际采用的技术吗?其次,如果是这种情况,假设每个表面都有两个法线(一个与另一个相对),DirectX 如何知道使用哪一个法线?
我有一个try块,它目前捕获所有异常:
try
{
// do some work
}
catch (std::exception &ex)
{
// log ex
}
Run Code Online (Sandbox Code Playgroud)
但是,我不想捕获访问冲突.我可以将其指定为我的处理程序的异常(可以这么说)吗?或者我应该先抓住它并重新抛出它?
python 2.6 docs声明x % y被定义为x/y的剩余部分(http://docs.python.org/library/stdtypes.html#numeric-types-int-float-long-complex).我不知道究竟发生了什么,如:
for i in range(2, 11):
print 1.0 % i
Run Code Online (Sandbox Code Playgroud)
打印"1.0"十次,而不是像我预期的那样"0.5,0.333333,0.25"等(1/2 = 0.5等).
c++ ×4
3d ×1
c++11 ×1
c++98 ×1
collections ×1
culling ×1
default ×1
direct3d ×1
directx ×1
memory-leaks ×1
modulo ×1
parameters ×1
pointers ×1
powershell ×1
python ×1
shared-ptr ×1
vector ×1