我通过创建一个枚举类定义了一个元组及其索引:
/** parameter { key ; value1 ; value1 ; } */
using Parameter = std::tuple<unsigned, unsigned, unsigned>;
enum class ParameterKey : std::size_t {
KEY = 0,
VALUE1 = 1,
VALUE2 = 2
};
Run Code Online (Sandbox Code Playgroud)
现在我想从这个元组中得到一个值:
const auto& key = std::get<ParameterKey::KEY>(*parameterPointer);
Run Code Online (Sandbox Code Playgroud)
我认为从intto的隐式转换std::size_t是由: std::size_t语法确保的:
enum class ParameterKey : std::size_t {
....
}
Run Code Online (Sandbox Code Playgroud)
但我收到了这个错误
error: no matching function for call to ‘get<KEY>(std::tuple<unsigned int, unsigned int, unsigned int>&)’
Run Code Online (Sandbox Code Playgroud)
这工作正常,但它太啰嗦了:
const auto& key = std::get<static_cast<unsigned>(ParameterKey::KEY)>(*parameterPointer);
Run Code Online (Sandbox Code Playgroud) 有没有办法使用原始二进制值向字符串添加字符?我知道我可以做这样的事情:
std::string output3 = std::string("\x01\x00\x01...", ...);
Run Code Online (Sandbox Code Playgroud)
这是通过字符的十六进制值完成的。是否可以通过其 bin 值来指定字符?像这样的东西:
std::string output1 = std::string("\b11100101\b01000000", 7);
Run Code Online (Sandbox Code Playgroud)
注意:我知道\b有它的含义,这只是一个例子。
每当我必须确定 foreach 循环中的当前循环是否是最后一个循环时,我会使用以下方法:
<?php
$i = count($myArray);
foreach ($myArray as $item) {
/** code goes here... */
$i--;
if ($i == 0) {
/** something happens here */
}
}
?>
Run Code Online (Sandbox Code Playgroud)
通常,这可以通过知道循环变量(first、last、...)在模板系统(例如 Latte、Smarty 等)中轻松完成。我的问题是:PHP 中是否有类似的功能?
关键是你必须创建$i变量,然后增加它并检查值。我只是想知道是否有更简单的解决方案可以让我的生活更轻松一些。:)
我正在编写一个简单的数据包解析器.为了测试,我准备了以下格式的数据:
std::string input = "0903000000330001 ... ";
Run Code Online (Sandbox Code Playgroud)
我需要把它变成这样的东西
0x09 0x03 0x00 0x00 ...
Run Code Online (Sandbox Code Playgroud)
你能帮我解释一下我应该如何构建新的字符串吗?
我已经尝试过这些......
std::string newInput = "\x09\x03\x00 ... ";
std::string newInput = "\u0009\u0003\u0000 ...";
Run Code Online (Sandbox Code Playgroud)
但程序返回该字符串的大小只有两个.
std::cout << newInput.size() << std::endl;
> 2
Run Code Online (Sandbox Code Playgroud)
我真的失踪或误解了一些东西......
我已经从 GTK 复制了一个示例项目
#include <gtkmm.h>
int main(int argc, char *argv[])
{
auto app = Gtk::Application::create(argc, argv, "org.gtkmm.examples.base");
Gtk::Window window;
window.set_default_size(200, 200);
return app->run(window);
}
Run Code Online (Sandbox Code Playgroud)
当直接从终端编译时,它工作得很好:
g++ main.cpp -o simple `pkg-config gtkmm-3.0 --cflags --libs`
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用 Clion 进行编译时,它说
fatal error: gtkmm.h: No such file or directory
#include <gtkmm.h>
Run Code Online (Sandbox Code Playgroud)
我的 CMakeLists.txt 看起来像这样:
cmake_minimum_required(VERSION 3.8)
project(songbook)
set(CMAKE_CXX_STANDARD 17)
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
include_directories(${GTK3_INCLUDE_DIRS})
link_directories(${GTK3_LIBRARY_DIRS})
add_definitions(${GTK3_CFLAGS_OTHER})
set(SOURCE_FILES main.cpp)
add_executable(songbook ${SOURCE_FILES})
target_link_libraries(songbook ${GTK3_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我不得不在我的工作中开始使用C++,实际上,我开始喜欢它.感谢斯科特迈耶斯的书,并没有那么难.但我讨厌标准库中包含的功能(不).将来会在D's Phobos库(https://dlang.org/phobos/)中有类似的功能集(例如)吗?
为什么没有使用字符串,JSON,TCP/IP,处理数组的功能的方法?我已经找到了一些关于网络的论文,等等,http://en.cppreference.com/w/cpp/experimental.但这些功能真的会进入STL标准库?如果是的话 - 何时?
注意:我知道Boost框架.有没有关于将它合并到标准库中的讨论?
我知道这些价值观
unsigned char year = 17; // means 2017
unsigned char month = 8;
unsigned char day = 25;
unsigned char hour = 14;
unsigned char minute = 23;
unsigned char second = 54;
Run Code Online (Sandbox Code Playgroud)
我怎样才能将它们转换成unix时间戳?我不确定这是否unsigned char是表示该值的正确方法,我只需要每个值的大小为 1 个字节。
首先,我被迫使用LispWorks,我想知道它实际使用了什么编译器,以及我是否可以在CLI中使用它.同样在LispWorks中有类似的方法defsystem,它们是以某种方式在环境中构建的还是它们形成了一个我可以在sbclREPL中实际加载的包(例如)?