- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试扩展 lexical_cast 以处理 string->cv::Point 转换,代码如下:
#include <iostream>
#include <opencv2/opencv.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/split.hpp>
namespace boost {
template<>
cv::Point2f lexical_cast(const std::string &str) {
std::vector<std::string> parts;
boost::split(parts, str, boost::is_any_of(","));
cv::Point2f R;
R.x = boost::lexical_cast<float>(parts[0]);
R.y = boost::lexical_cast<float>(parts[1]);
return R;
}
}
int main(int argc, char **argv) {
auto p = boost::lexical_cast<cv::Point2f>(std::string("1,2"));
std::cout << "p = " << p << std::endl;
return 0;
}
而且效果很好.. 然而,cv::Point2f
实际上是cv::Point_<T>
其中 T 可以是 int、float、double 等。无论如何我找不到将模板化的 arg 公开给 lexical_cast,这样我就可以有一个 lexical_cast 函数来处理所有 cv::Point_<T>
类型。
最佳答案
template <typename T>
struct point_type {};
template <typename T>
struct point_type<cv::Point_<T>> { using type = T; };
namespace boost {
template <typename T, typename U = typename point_type<T>::type>
T lexical_cast(const std::string &str)
{
std::vector<std::string> parts;
boost::split(parts, str, boost::is_any_of(","));
T R;
R.x = boost::lexical_cast<U>(parts[0]);
R.y = boost::lexical_cast<U>(parts[1]);
return R;
}
}
如果您不喜欢 lexical_cast
的这个隐式第二个模板参数,则之前的解决方案稍微复杂一点:
#include <type_traits>
template <typename T>
struct is_point : std::false_type {};
template <typename T>
struct is_point<cv::Point_<T>> : std::true_type {};
template <typename T>
struct point_type;
template <typename T>
struct point_type<cv::Point_<T>> { using type = T; };
namespace boost {
template <typename T>
auto lexical_cast(const std::string &str)
-> typename std::enable_if<is_point<T>::value, T>::type
{
std::vector<std::string> parts;
boost::split(parts, str, boost::is_any_of(","));
using U = typename point_type<T>::type;
T R;
R.x = boost::lexical_cast<U>(parts[0]);
R.y = boost::lexical_cast<U>(parts[1]);
return R;
}
}
关于c++ - 用模板类重载 lexical_Cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26285299/
我看到了其他 boost::lexical_cast 问题的一些答案,断言以下是可能的: bool b = boost::lexical_cast("true"); 这不适用于 g++ 4.4.3 b
我已经看到其他 boost::lexical_cast 问题的一些答案,这些问题断言以下是可能的: bool b = boost::lexical_cast("true"); 这不适用于 g++ 4.
boost::lexical_cast 在将字符串转换为 int8_t 时抛出异常,但 int32_t - 正常。 int8_t 有什么问题? #include #include #include
我正在尝试扩展 lexical_cast 以处理 string->cv::Point 转换,代码如下: #include #include #include #include #include
我在这个话题中看到C++ convert hex string to signed integer boost::lexical_cast 可以将字符串中的十六进制转换为另一种类型(int、long.
我想扩展 lexical_cast vector 的方法类型,但它不起作用。我尝试了以下代码: #include namespace boost { template <> inli
我是 boost::lexical_cast 的新手,对其内部结构了解甚少。我正在尝试进行以下转换: string someString = boost::lexical_cast(sourceStr
我正在尝试构建一个将程序设置存储为 std::map 的类。由于所有程序设置都存储为字符串,因此我想要一个可以返回转换为相关类型的程序设置的访问器方法。我刚接触 C++ 模板,这是我的第一次尝试: c
我在两个不同的设备上有相同版本的 boost ,但行为不同 lexical_cast("-1") 文档指出它应该给我 INT_MAX(2 的补码翻转)但是在一台机器上我得到一个异常抛出而在另一台机器上
我有一个(也许)关于复合类型的 boost::lexical_cast 的简单问题(在我的例子中是 std::vector。 我的第一个模板化字符串化函数版本如下 template std::str
我遇到了转换问题,希望得到您的帮助。我正在使用 gcc4 编译器,但我对 gcc4 的使用非常有限。 我想将 std::string 转换为 double。 std::string aQuantity
我有一种情况,我正在获取命令行参数并使用 boost::lexical_cast(my_param) .我希望 my_param 的负值会导致 lexical_cast 抛出,但它会愉快地转换它们,-
我正在使用 boost::lexical_cast(double)用于将 double 转换为字符串,生成 JSON 序列化字节流,即(在远程端)由 .NET 解析。 我能够强制 .NET 使用 In
我实际上没能在 boost 文档中找到这个问题的答案。我对在多线程环境中使用 atof 有点偏执,所以一个建议是用 lexical_cast 替换调用。 lexical_cast 是线程安全的吗? 最
我正在为 C++ 使用 boost 库,函数 lexical_cast 的行为非常奇怪。如果我执行 lexical_cast("0.07513994") 它工作正常,但如果我使用我需要转换的变量,它会
编译以下内容: // file main.cpp #include #include int main() { boost::lexical_cast( 656.16 ); ret
以 bool 变量作为输入的 boost::lexical_cast 的输出预计为 0 或 1 值(value)。但是我得到了不同的值。 这不是正常发生的事情。让我们看一下我编写的示例代码: #inc
我查看了 lexical_cast.hpp 的困惑情况,但它仍然让我无法理解。 lexical_cast 的“基本定义”采用模板源和目标,如何能够接受诸如 lexical_cast("7") 之类的语
我正在参加一项挑战,为了切入主题,在我的程序中的一个地方,我需要将字符串转换为整数。我试过 boost::lexical_cast 但不幸的是它太慢了www。我想是因为它执行的所有检查。我需要的是无需
忽略 boost::lexical_cast 的异常是否安全?将 int 转换为 std::string 时? 最佳答案 将 int 转换为 std::string 时词法转换引发的异常与转换无关,但
我是一名优秀的程序员,十分优秀!