可能重复:
C/C++:传递可变数量的参数
根据功能申报方式
return-type function-name(parameter-list, ...) {body ...}
以下代码是一种重载吗?
(在A_FILE.h中)
typedef VOID *FUNCTION(UINTN Number, ...);
似乎我可以将一个Number参数或更多参数传递给FUNCTION函数,参数的数量是否取决于函数的实现?
我试图将空值传递给函数但失败了.这是我的设置;
function gameBonus.new( x, y, kind, howFast ) -- constructor
local newgameBonus = {
x = x or 0,
y = y or 0,
kind = kind or "no kind",
howFast = howFast or "no speed"
}
return setmetatable( newgameBonus, gameBonus_mt )
end
Run Code Online (Sandbox Code Playgroud)
我只希望传递"kind"并希望构造函数处理剩下的事情.喜欢;
local dog3 = dog.new("" ,"" , "bonus","" )
Run Code Online (Sandbox Code Playgroud)
或者我只想传递"howFast";
local dog3 = dog.new( , , , "faster")
Run Code Online (Sandbox Code Playgroud)
无论有""没有尝试,给出错误:
'附近的意外符号'
我有一个像下面这样的单身APIService
import Foundation
import Alamofire
import SwiftyJSON
typealias Success = JSON -> Void
typealias Failure = NSError? -> Void
class APIService {
private let BaseURL = "http://api.openweathermap.org/data/2.5"
class var instance: APIService {
struct Singleton {
static let instance: APIService = APIService()
}
return Singleton.instance
}
func currentWeather(cityName: String, success:Success?, failure:Failure?) {
let url = BaseURL + "/weather"
Alamofire.request(.GET, url, parameters:["q" : cityName])
.responseJSON { (_, _, jsonObject, error) in
if error != nil && failure != nil {
failure!(error)
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写可使我索引到函数的参数类型的代码:
template <typename R, typename... ARGS>
R function_return(R(*)(ARGS...));
template <typename R, typename... ARGS>
std::tuple<ARGS...> function_parameters(R(*)(ARGS...));
template <int I, typename T>
using get_type = typename std::conditional_t<(I < 0), std::tuple_element<static_cast<int>(std::tuple_size_v<T>) + I, T>, std::tuple_element<I, T>>::type;
template <int I, typename T>
using parameter_type = get_type<I, decltype(function_parameters(std::declval<T>()))>;
Run Code Online (Sandbox Code Playgroud)
Live Example (ICE under VS) Live Example (working on GCC)
但是当我尝试在visual-studio-2017上使用它时,出现内部编译器错误:
严重错误C1001:编译器中发生内部错误。
我还有另一种方法可以解决内部编译器错误吗?
c++ function-parameter internal-compiler-error template-variables visual-studio-2017
通过android的教程(与多线程,loopers和处理程序相关),我遇到了这个:
public synchronized void enqueueDownload(final DownloadTask task)
Run Code Online (Sandbox Code Playgroud)
我的问题是:
在Python中,我习惯了类似的东西
def send_command(command, modifier = None):
Run Code Online (Sandbox Code Playgroud)
然后modifier参数是可选的,并且参数的缺失可以与参数0区分开来.在C中是否有类似的功能?我没有C和Googling的经验,但是找不到如何在C中使用可选参数的明确声明.看起来你可以类似地分配它们,如下所示:
void send_command(uint8_t command, uint8_t modifier = 0) {
Run Code Online (Sandbox Code Playgroud)
所以第二个参数是可选的,如果不使用则默认为0? (编辑:不,无论如何这是无效的C)
但功能可以区分send_command(SOMETHING)和send_command(SOMETHING, 0)?理想情况下,第二个参数可以是任何uint8值,包括0.
也许NULL与0不同?
void send_command(uint8_t command, uint8_t modifier = NULL) {
Run Code Online (Sandbox Code Playgroud) c null optional-parameters function-parameter function-declaration
以下是否有任何区别
def foo(s: String) = { ... }
Run Code Online (Sandbox Code Playgroud)
和
def foo(s: => String) { ... }
Run Code Online (Sandbox Code Playgroud)
这两个定义都接受"sss"作为参数.
我有一个快速的类,我试图在其中传递函数参数的默认值:
class SuperDuperCoolClass : UIViewController {
// declared a constant
let primaryColor : UIColor = UIColor(red: 72.0/255.0, green: 86.0/255.0, blue: 114.0/255.0, alpha: 1.0)
// compilation error at below line: SuperDuperCoolClass.Type does not have a member named 'primaryColor'
func configureCheckmarkedBullet(bullet: UIButton, color: UIColor = primaryColor){
// some cool stuff with bullet and primaryColor
}
}
Run Code Online (Sandbox Code Playgroud)
如上所述,如果我尝试使用常数作为函数参数的默认值,则编译器会抱怨以下错误:
SuperDuperCoolClass.Type does not have a member named 'primaryColor'
Run Code Online (Sandbox Code Playgroud)
但是如果我这样直接分配RHS值,它不会抱怨:-/:
func configureCheckmarkedBullet(bullet: UIButton, color: UIColor = UIColor(red: 72.0/255.0, green: 86.0/255.0, blue: 114.0/255.0, alpha: 1.0)) {
// …Run Code Online (Sandbox Code Playgroud) 我对C ++有点生疏,经过一年的python转换。自然,我想将python的懒惰翻译成C ++。
我刚刚发现rot13,我对此感到非常兴奋。我找到了3种方法,并且我想做一点性能测试。我还想看看在适当位置修改字符串或创建新字符串是否有区别。所以我最终有6个功能。
在第一种方法中,我使用std :: map映射字符,因此,我建立了一个初始化映射的类,在第二种方法中,我使用了三元运算符,第三种方法是使用了位移。
现在函数原型看起来像这样
// map dependent
void Rot13::convert_inplace(string& mystr){
string Rot13::convert(const string& mystr){
// ternary operator
void bitrot_inplace(string& mystr){
string bitrot(const string& mystr){
// bit shift
void bitshiftrot_inplace(string& mystr){
string bitshiftrot(const string& mystr){
Run Code Online (Sandbox Code Playgroud)
我想构造一个接受这些函数作为参数的函数,然后计算时间并打印结果
typedef void (*vfc)(string str);
void printtime_inplace(string title, vfc func){
Run Code Online (Sandbox Code Playgroud)
我尝试了这种构造,但这意味着我受到vfc返回类型(在我的情况下为voidor)的限制string,并且受制于我需要传递类的指针的事实。因此,我将必须做3个函数来容纳不同的函数,即用于类成员函数的函数,用于void返回类型的函数和用于字符串返回类型的函数。
所以我问自己,是否真的需要使用模板而不编写相同功能的3倍?我对模板真的没有信心,但是我应该做3 typedefs并构造printtime函数以接受模板吗?此外,有没有办法告诉模板您将只接受这些类型(即我定义的类型)?
另一个问题,这可以说是一个好的设计吗?还是您会建议其他设计?其他实现?
numba.jit在python中使用。
我可以将普通函数转换为jit类型并运行:
from numba import jit
def sum(a, b):
return a+b
func = jit(sum)
print(func(1, 2))
Run Code Online (Sandbox Code Playgroud)
如何做到这一点的方法?这样的事情(这不起作用,我知道为什么)。
from numba import jit
class some_class:
def __init__(self, something = 0):
self.number = something
def get_num(self):
return self.number
my_object = some_class(5)
func = jit(my_object.get_num)
print(my_object.func())
Run Code Online (Sandbox Code Playgroud)
PS我也尝试过装饰器,它可以工作,但是我不能将其用于导入的类(我自己没有定义的类),所以我正在研究这个。