我从这段代码中遇到了麻烦,在我从main.cpp文件中取出这个类并将其拆分为.h和.cpp后,编译器开始抱怨我在void中使用的默认参数.
/* PBASE.H */
class pBase : public sf::Thread {
private:
bool Running;
public:
sf::Mutex Mutex;
WORD OriginalColor;
pBase(){
Launch();
Running = true;
OriginalColor = 0x7;
}
void progressBar(int , int);
bool key_pressed();
void setColor( int );
void setTitle( LPCWSTR );
bool test_connection(){
if(Running == false){
return 0;
}
else{
return 1;
}
return 0;
}
void Stop(){
Running = false;
if(Running == false) Wait();
}
};
Run Code Online (Sandbox Code Playgroud)
/* PBASE.CPP */
// ... other stuff above
void pBase::setColor( int _color = …Run Code Online (Sandbox Code Playgroud) 我使用了高级参数处理来支持多个参数集.是否有任何预定义的变量或方法来确定哪个参数集用于调用脚本?
例如
if($parameterSet -eq "set1") { ... } elseif ($parameterSet -eq "set2") { ... }
Run Code Online (Sandbox Code Playgroud)
?
是否有一个已知的原因,为什么在null提供一个参数时,作为ES6中的参数传入时不使用默认参数?
function sayHello(name = "World") {
console.log("Hello, " + name + "!");
}
sayHello("Jim"); // Hello, Jim!
sayHello(undefined); // Hello, World!
sayHello(null); // Hello, null!
Run Code Online (Sandbox Code Playgroud) 我想为webservice编写一个包装器方法,该服务接受2个强制参数和3个可选参数.
为了有一个更短的例子,我想得到以下代码
def myMethod(pParm1='1', pParm2='2') {
println "${pParm1}${pParm2}"
}
myMethod();
myMethod('a')
myMethod(pParm2:'a') // doesn't work as expected
myMethod('b','c')
Run Code Online (Sandbox Code Playgroud)
输出是:
12
a2
[pParm2:a]2
a2
bc
Run Code Online (Sandbox Code Playgroud)
我想要实现的是给出一个参数并得到1a结果.这是可能的(以最懒惰的方式)?
我正在研究Scala API(顺便说一下,对于Twilio),其中操作具有相当多的参数,其中许多具有合理的默认值.为了减少输入并增加可用性,我决定使用带有命名和默认参数的case类.例如对于TwiML Gather动词:
case class Gather(finishOnKey: Char = '#',
numDigits: Int = Integer.MAX_VALUE, // Infinite
callbackUrl: Option[String] = None,
timeout: Int = 5
) extends Verb
Run Code Online (Sandbox Code Playgroud)
这里感兴趣的参数是callbackUrl.它是唯一真正可选的参数,如果没有提供任何值,则不会应用任何值(这是完全合法的).
我已经宣布它是一个选项,以便在API的实现方面使用它来执行monadic map例程,但这给API用户带来了额外的负担:
Gather(numDigits = 4, callbackUrl = Some("http://xxx"))
// Should have been
Gather(numDigits = 4, callbackUrl = "http://xxx")
// Without the optional url, both cases are similar
Gather(numDigits = 4)
Run Code Online (Sandbox Code Playgroud)
据我所知,有两种选择(没有双关语)来解决这个问题.要么让API客户端导入隐式转换到范围:
implicit def string2Option(s: String) : Option[String] = Some(s)
Run Code Online (Sandbox Code Playgroud)
或者我可以使用null默认值重新声明case类,并将其转换为实现端的选项:
case class Gather(finishOnKey: Char = '#',
numDigits: Int = …Run Code Online (Sandbox Code Playgroud) 例:
public int foo(int x, int optionalY = 1, int optionalZ = 2) { ... }
Run Code Online (Sandbox Code Playgroud)
我想这样称呼它:
int returnVal = foo(5,,8);
Run Code Online (Sandbox Code Playgroud)
换句话说,我想提供x和z,但我想使用默认值Y,optionalY = 1.
Visual Studio不喜欢 ,,
请帮忙.
有人可能想要使用参数声明一个函数,并指定参数的默认值是类型的默认构造函数的结果:
void foo(a::really::long::type::name arg = a::really::long::type::name());
Run Code Online (Sandbox Code Playgroud)
是否有更好的语法,不涉及输入类型名称两次?就像是:
void foo(a::really::long::type::name arg = default);
Run Code Online (Sandbox Code Playgroud)
我意识到我可以typedef使用类型名称使其更漂亮,但我很好奇是否存在这样的语法.
可能重复:
Python中的"最小惊讶":可变默认参数
我对Python函数/方法中可选参数的工作原理感到困惑.
我有以下代码块:
>>> def F(a, b=[]):
... b.append(a)
... return b
...
>>> F(0)
[0]
>>> F(1)
[0, 1]
>>>
Run Code Online (Sandbox Code Playgroud)
为什么F(1)回归[0, 1]而不是[1]?
我的意思是,里面发生了什么?
如何在Visual Basic中创建一个包含可选参数的方法?
让我们采用以下函数声明:
void print(SomeType const* i);
Run Code Online (Sandbox Code Playgroud)
在这里,const*参数的性质i暗示了意图,即参数是optional,因为它可能是nullptr。如果这不是故意的,那么参数将只是一个const&. 交流可选的语义当然不是设计指针的初衷,但使用它们来这样做恰好在很长一段时间内都能正常工作。
现在,由于在现代 C++ 中通常不鼓励使用原始指针(并且应该避免使用std::unique_ptr并std::shared_ptr精确指示特定的所有权 -语义),我想知道如何正确指示函数参数的可选 -语义而不传递值,即复制,作为
void print(std::optional<SomeType> i);
Run Code Online (Sandbox Code Playgroud)
会做。
考虑了一段时间后,我想出了使用的想法:
void print(std::optional<SomeType const&> i);
Run Code Online (Sandbox Code Playgroud)
这实际上是最准确的。但事实证明std::optional 不能有引用类型。¹
另外,使用
void print(std::optional<SomeType> const& i);
Run Code Online (Sandbox Code Playgroud)
决不会是最优的,从那时起,我们将要求我们SomeType在向存在std::optional于主叫侧的,可能再次(或相当可能)需要复制那里。
问题:那么在不复制的情况下允许可选参数的现代方法是什么?在这里使用原始指针在现代 C++ 中仍然是一种合理的方法吗?
¹:具有讽刺意味的是,所描述的为什么std::optional不能有引用类型的原因(关于重新绑定或转发赋值的争议)不适用于const引用的std::optionals的情况,因为它们不能被分配。
c++ ×3
parameters ×3
c# ×1
c++11 ×1
class ×1
ecmascript-6 ×1
groovy ×1
javascript ×1
optional ×1
pointers ×1
powershell ×1
python ×1
scala ×1
semantics ×1
syntax ×1
vb.net ×1