1
我想写一个使用linasm-1.13 library的八度C++ .oct函数,但我似乎无法从/ usr/share/zoneinfo /工作基本加载tzdata。我简单的测试功能至今C++时间库和八度.oct文件
#include <octave/oct.h>
#include <Time.h> // the linasm-1.13 library
DEFUN_DLD (tz, args, nargout,
"-*- texinfo -*-\n\
@deftypefn {Function File} {} tz (@var{YYYYMMDDHHMMSS})\n\
\n\
@end deftypefn")
{
octave_value_list retval_list ;
unsigned int tz ;
const char *ny_time = "/usr/share/zoneinfo/America/New_York" ;
tz = Time::LoadTimeZone(ny_time) ;
return retval_list ;
其中,与mkoctfile编译,给出了这样的错误
>> mkoctfile tz.cc
tz.cc: In function ‘octave_value_list Ftz(const octave_value_list&, int)’:
tz.cc:24:34: error: cannot call member function ‘unsigned int Time::LoadTimeZone(const char*)’ without object
tz = Time::LoadTimeZone(ny_time) ;
^
warning: mkoctfile: building exited with failure status
我对此的理解是,ny_time不被识别的对象,但我已尽力将ny_time强制转换为字符串,详见this accepted SO answer。
我这样做是因为根据linasm page的LoadTimeZone的输入应该是“tzfile的路径,它描述了所需的时区”。我哪里错了?
从错误消息看来,您需要首先构造一个Time对象,然后在该对象上调用LoadTimeZone。所以,你可能还需要在'Time'类中提供一个Octave包装器,然后需要Octave代码来提供它。 –
顺便说一下,在大多数情况下,我更喜欢使用Swig来手动编写绑定,因为Swig会为您处理许多繁琐的细节(并且它支持生成Octave绑定)。 –
如果您使用的是C++ 11或更高版本,则可以考虑使用以下替代时区库:https://howardhinnant.github.io/date/tz.html它具有出色的文档和支持。 –