场景
我有一个 C++ 函数,它接收一个参数作为std::chrono::milliseconds. 它基本上是一个超时值。并且,它是默认设置为某个值的默认参数。
代码
#include <iostream>
#include <chrono>
void Fun(const std::chrono::milliseconds someTimeout = std::chrono::milliseconds(100)) {
if (someTimeout > 0) {
std::cout << "someNumberInMillis is: " << someNumberInMillis.count() << std::endl;
}
}
int main() {
unsigned int someValue = 500;
Fun(std::chrono::milliseconds(someValue))
}
Run Code Online (Sandbox Code Playgroud)
问题
以上所有内容都可以,但是当我使用Fun值调用时,无法编译并收到以下错误:
没有从“bool”到“std::chrono::milliseconds”(又名“duration >”)的可行转换
问题:
我在这里做错了什么?我希望 的调用者在调用 时Fun明确意识到它正在使用. 但编译器似乎不允许用作参数?std::chrono::millisecondsFunstd::chrono::milliseconds
如何使用std::chrono::milliseconds作为默认参数?
在 macOS High Sierra 上使用的环境
编译器是 clang
我有 C++11 程序,它需要从一系列值中选择一个值。每个范围都有一个指定的值以从中选择一个值。
以下是我的值范围,并为每个值分配了值。
1-10 = 5
11-14 = 13
15-20 = 17
21-28 = 24
29-36 = 31
37-47 = 43
48-52 = 50
53-60 = 53
61-68 = 65
Run Code Online (Sandbox Code Playgroud)
因此,如您所见,如果输入介于 1-10 之间,则 5 应为返回值,如果输入介于 11-14 之间,则应选择 13,依此类推。
上面的要求可以通过下面的程序来实现,其中包含一个很大的 if else 语句的脏列表。
#include <iostream>
// Following are return values to chosen based on which range the input value falls within
// 1-10 = 5
// 11-14 = 13
// 15-20 = 17
// 21-28 = 24
// 29-36 = …Run Code Online (Sandbox Code Playgroud) 我正在尝试从我的MacOS High Sierra上的此链接构建此简单的boost python演示。
以下是hello_ext.cpp:
#include <boost/python.hpp>
char const* greet()
{
return "hello, world";
}
BOOST_PYTHON_MODULE(hello_ext)
{
using namespace boost::python;
def("greet", greet);
}
Run Code Online (Sandbox Code Playgroud)
以下是CmakeLists.txt:
cmake_minimum_required(VERSION 3.5)
# Find python and Boost - both are required dependencies
find_package(PythonLibs 2.7 REQUIRED)
find_package(Boost COMPONENTS python REQUIRED)
# Without this, any build libraries automatically have names "lib{x}.so"
set(CMAKE_SHARED_MODULE_PREFIX "")
# Add a shared module - modules are intended to be imported at runtime.
# - This is where …Run Code Online (Sandbox Code Playgroud) 我有以下代码在 Android 10 之前运行良好。但它无法在 Android 10 设备中打开 wifi。
WifiManager wifiMgr = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
boolean res = wifiMgr.setWifiEnabled(true);
//res value is set to false above because setWifiEnabled returns false on Android 10
Run Code Online (Sandbox Code Playgroud)
以下是我的权限 AndroidManifest.xml
<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>
<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>
<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>
<uses-permission android:name=\"android.permission.INTERNET\"/>
<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>
Run Code Online (Sandbox Code Playgroud)
我什至动态请求这些权限。但这似乎也无济于事。
问:
Android 10 有什么变化吗?我应该做更多的事情来从我的应用程序以编程方式打开 wifi 吗?
如何检查字符串是否严格包含字母和数字?
跟随还不够?
def containsLettersAndNumber(input):
if input.isalnum():
return True
else:
return False
isAlnum = containsLettersAndNumber('abc') # Should return false
isAlnum = containsLettersAndNumber('123') # Should return false
isAlnum = containsLettersAndNumber('abc123') # Should return true
isAlnum = containsLettersAndNumber('abc123$#') # Should return true
Run Code Online (Sandbox Code Playgroud)
请注意,它必须同时包含字母和数字
Android 10 上的altbeacon已停止工作。是否需要进行任何更改,特别是要转到 Android 10?
我已将以下权限添加到我的 AndroidManifest.xml
<uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\"/>
<uses-permission android:name=\"android.permission.BLUETOOTH\"/>
<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>
<uses-permission android:name=\"android.permission.ACCESS_BACKGROUND_LOCATION\"/>
<uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\" />
<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>
Run Code Online (Sandbox Code Playgroud)
查看应用程序权限,我的应用程序在运行时具有位置和BT权限。我开始onBeaconServiceConnect按照https://altbeacon.github.io/android-beacon-library/samples.html 的规定寻找信标。我错过了什么?
由于setWifiEnabled在 Android 10 上已弃用,如何在 Android 10 设备上以编程方式启用 wifi?
是否无法在 Android 10+ (SDK 29) 上以编程方式启用 wifi?
我正在使用一个内联全局变量,它非常适合它。
class MyClass {
public:
void Func() {
}
}
inline MyClass myClass; // global inline variable
Run Code Online (Sandbox Code Playgroud)
以上适用于我的目的,但是当我的代码在 gcc 上编译时使用低于 C++17 的编译器时我收到警告。以下是警告
警告:内联变量仅适用于 -std=c++1z 或 -std=gnu++1z
问题:
如何抑制 gcc 上的警告?
我试图通过使用#pragma下面的类似来抑制警告
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wc++17-extensions"
inline MyClass myClass;
#pragma GCC diagnostic pop
Run Code Online (Sandbox Code Playgroud)
上述#pragma技术适用于 clang,但看起来 GCC 不理解#pragma? 我只是想蛮力压制 GCC 上的警告。我怎样才能做到这一点?
看起来 gcc 警告选项列表甚至没有提到这个? https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
我正在使用gcc (GCC) 7.3.0
我有 2 个像这样的向量:
std::vector<unsigned char> v1;
std::vector<unsigned char> v2;
Run Code Online (Sandbox Code Playgroud)
当然,他们每个人都有一些数据。
我知道如果我想将 v2 附加到 v1,下面是方法。v1.insert(v1.end(), v2.begin(), v2.end());
问题:
如何将 v1 加到 v2 之前?
v2.insert(v2.begin(), v1.begin(), v1.end())似乎在这里不起作用?
我知道我可能会得到使用的建议,std::deque但问题是这v2是std::vector我无法更改的遗留代码中的一个函数。它包含大量数据,我不想v2通过追加复制到这些数据。所以,我只是想加上v1,v2因为v1与v2
我有一个chars向量,其中包含一些数据元素。
std::vector<unsigned char> data_1;
Run Code Online (Sandbox Code Playgroud)
我有一个未签名的char *,它指向另一组数据元素。
unsigned char * data_2;
Run Code Online (Sandbox Code Playgroud)
问题:
有没有一种方法可以合并data_2到data_1向量中而根本不引起数据元素的复制?
我读到了本次讨论中提到的移动语义,但是我不确定在这种情况下是否有可能。
c++11 ×4
android-10.0 ×3
c++ ×3
python ×2
stdvector ×2
wifimanager ×2
altbeacon ×1
android ×1
android-wifi ×1
boost-python ×1
c++-chrono ×1
c++17 ×1
g++ ×1
gcc ×1
ibeacon ×1
kontakt.io ×1
milliseconds ×1
python-2.7 ×1
std-pair ×1
stdmap ×1
wifi ×1