小编mat*_*scy的帖子

如何根据模板函数中的类型构造不同的对象?

这是我的问题,我有一个基类Base、两个派生类ClassA和仅采用两个参数的ClassB形式Base,以及两个类ClassB0ClassB1ClassB采用三个参数派生而来。我想根据传递给函数的类型创建类实例create,如果类型派生自ClassB,则第一个参数将填充为 10。编译器总是警告没有匹配的构造函数。

#include <iostream>
#include <type_traits>

class Base {};
class ClassA : public Base {
public:
  ClassA(int a, int b) : Base() {
    std::cout << "ClassA: " << a << " " << b << "\n\n";
  }
};

class ClassB : public Base {
public:
  ClassB(int a, int b, int c) : Base() {
    std::cout << "ClassB: " << a << " …
Run Code Online (Sandbox Code Playgroud)

c++ templates variadic-templates parameter-pack

3
推荐指数
1
解决办法
87
查看次数

使用 trait 找不到方法

我是 Rust 的初学者。我创建了一个名为 的特征Floatingf32f64实现了这个特征。Vec要求T必须实现 Floatingtrait 的通用结构。我想计算norm向量,这不会编译,错误消息说no method named sqrtfor type parameter Tin the current scope。为什么会发生这种情况以及它将如何运作?

use std::ops::{Mul, Add};

trait Floating: Sized + Copy + Clone + Mul<Output=Self> + Add<Output=Self> {}

impl Floating for f32 {}

impl Floating for f64 {}

struct Vec<T: Floating> {
    x: T,
    y: T,
    z: T,
}

impl<T: Floating> Vec<T> {
    fn norm(&self) -> T {
        (self.x * self.x …
Run Code Online (Sandbox Code Playgroud)

rust

2
推荐指数
1
解决办法
378
查看次数